/branches/v0.60_MicroMag3_Nick666/Flight-Ctrl_MEGA644_V0_60_MM3.hex |
---|
1,17 → 1,17 |
:100000000C9492030C94AF030C94AF030C94AF03C5 |
:100010000C94AF030C94AF030C94AF030C94AF0398 |
:100020000C94AF030C94B20B0C94AF030C94AF037D |
:100030000C9404190C94AF030C94AF030C94AF030D |
:100040000C94AF030C94AF030C94590C0C948114D2 |
:100030000C94F5180C94AF030C94AF030C94AF031D |
:100040000C94AF030C94AF030C94590C0C947214E1 |
:100050000C94D4050C94AF030C949E050C94AF0340 |
:100060000C94390D0C94AF030C945D180C94AF03F1 |
:100060000C942A0D0C94AF030C944E180C94AF030F |
:100070004B08C508C508C5087D085E08C508C50841 |
:10008000C508A908A908A908A908A9088108C508D8 |
:10009000C5087008C5087908620DB40D0D0E680E0C |
:1000A000850EA80ECE0E9C0FBE10F2105311A91192 |
:1000B000F7117012CA122B134F138513C113FF13BC |
:1000C000381476187B189718A518AA18B518BD18F3 |
:1000D000D1180A0A0D004E65757472616C0048658E |
:10009000C5087008C5087908530DA50DFE0D590E49 |
:1000A000760E990EBF0E8D0FAF10E31044119A110A |
:1000B000E8116112BB121C1340137613B213F01334 |
:1000C000291467186C18881896189B18A618AE186B |
:1000D000C2180A0A0D004E65757472616C0048659D |
:1000E0006164696E67486F6C64000A0D53746575CE |
:1000F0006572756E673A20004F4B0A0D000A0D417C |
:1001000062676C65696368204C75667464727563B8 |
113,16 → 113,16 |
:1007000036827D3F80177E3FFD987E3F9E067F3F6D |
:100710005B607F3F2FA67F3F13D87F3F05F67F3F6B |
:100720000000803F11241FBECFEFD0E1DEBFCDBF60 |
:1007300011E0A0E0B1E0EAE5FEE502C005900D920F |
:1007300011E0A0E0B1E0ECE3FEE502C005900D920F |
:10074000AC38B107D9F715E0ACE8B1E001C01D92B3 |
:10075000A733B107E1F70E94E7030C942C2F0C9408 |
:100760000000A2E0B0E00E940E2F802D992708958E |
:10075000A733B107E1F70E94E7030C941D2F0C9417 |
:100760000000A2E0B0E00E94FF2E802D992708959E |
:10077000FB01863008F085E0282F2150842F99272F |
:10078000AAE32A9FD0011124A65FBF4F019724F04E |
:1007900001900E941B2FFACFA2E0B0E0022E0E942F |
:1007A0001B2F0895FB01282F863008F025E0842FA9 |
:1007900001900E940C2FFACFA2E0B0E0022E0E943E |
:1007A0000C2F0895FB01282F863008F025E0842FB8 |
:1007B00099272150AAE32A9FD0011124A65FBF4F99 |
:1007C000019724F00E940E2F0192FACF08950F9303 |
:1007C000019724F00E94FF2E0192FACF08950F9313 |
:1007D0001F93CF93DF9381E087B98FEF88B98BE1C7 |
:1007E00084B9289A8EE38AB9579A87EF8BB984B770 |
:1007F000877F84BF80916000886180936000109241 |
129,22 → 129,22 |
:10080000600088EE93E09093A7018093A601109278 |
:100810002102109220021092B8041092B704109294 |
:100820001F0210921E0210921D0210921C022898A4 |
:100830000E94FB0C0E94A4070E94EF180E94330D37 |
:100840000E9443180E941D1778941092AF038CE306 |
:100830000E94EC0C0E94A4070E94E0180E94240D64 |
:100840000E9434180E940E1778941092AF038CE324 |
:100850008093B00384E08093B1038CE390E09F9396 |
:100860008F931F921F9283EB91E09F938F931F9220 |
:100870000E94240982E991E09F938F931F920E9426 |
:100880002409299AA1E0B0E00E940E2F802D2DB7F7 |
:100880002409299AA1E0B0E00E94FF2E802D2DB707 |
:100890003EB7265F3F4F2DBF8A30B9F183E691E026 |
:1008A0009F938F931F920E9424090E9458204AE32D |
:1008A0009F938F931F920E9424090E9449204AE33C |
:1008B0006FED74E080E00E94B80301E00F900F90AC |
:1008C0000F90023049F40E94EB1F4AE36FED74E091 |
:1008C0000F90023049F40E94DC1F4AE36FED74E0A0 |
:1008D00082E00E94B80303E04AE36FED74E0802FEA |
:1008E0000E94B8030F5F063060F381E022E030E041 |
:1008F000D901082E0E941B2F8AE021503040D901D7 |
:10090000082E0E941B2F0E94E22102E010E0D80175 |
:100910000E940E2F802D4AE36FED74E00E94D203F7 |
:10092000D8010E940E2F802D99279F938F9388E4E2 |
:1008F000D901082E0E940C2F8AE021503040D901E6 |
:10090000082E0E940C2F0E94D32102E010E0D80193 |
:100910000E94FF2E802D4AE36FED74E00E94D20307 |
:10092000D8010E94FF2E802D99279F938F9388E4F2 |
:1009300091E09F938F931F920E94240984EF91E08E |
:100940000E949D0BEC010F900F900F900F900F9055 |
:10095000CE010E94A60B8823D9F3E091E104FF2782 |
151,30 → 151,30 |
:10096000EE0FFF1FED54FB4F80819181853691057D |
:10097000C4F0E091E204FF27EE0FFF1FED54FB4FA0 |
:10098000808191818536910564F083E391E09F93A6 |
:100990008F931F920E9424090E9475160F900F904A |
:100990008F931F920E9424090E9466160F900F9059 |
:1009A0000F90E091E104FF27EE0FFF1FED54FB4F86 |
:1009B0008081918185369105C4F0E091E204FF27A2 |
:1009C000EE0FFF1FED54FB4F808191818C599F4F9B |
:1009D00064F48AE191E09F938F931F920E9424090F |
:1009E0000E94E2210F900F900F908091E70480FF0A |
:1009E0000E94D3210F900F900F908091E70480FF19 |
:1009F00020C08DEF90E09F938F931F920E94240957 |
:100A000084EC99E00E949D0BEC010E9436100F903F |
:100A000084EC99E00E949D0BEC010E9427100F904E |
:100A10000F900F90CE010E94A60B8823D9F388EF88 |
:100A200090E09F938F931F920E9424090F900F9044 |
:100A30000F900E941021289880ED97E09093A701D5 |
:100A30000F900E940121289880ED97E09093A701E4 |
:100A40008093A60188EE93E09093AA038093A90374 |
:100A500085E58093A4038AEE90E09F938F931F9285 |
:100A60000E9424098091E7040F900F900F9082FF5D |
:100A700003C08EED90E002C086ED90E09F938F93CF |
:100A80001F920E9424090F900F900F9082ED90E02A |
:100A90009F938F931F920E9424090E945D100F90D4 |
:100A90009F938F931F920E9424090E944E100F90E3 |
:100AA0000F900F908091A501882379F11092A501F4 |
:100AB0000E945B220E94C92028988091010188230E |
:100AB0000E944C220E94BA2028988091010188232C |
:100AC00019F081508093010180911B02882329F045 |
:100AD00080911B02815080931B022091060130916E |
:100AE00007018091F70499272817390734F480ED1E |
:100AF00097E09093A7018093A6018091D20188236B |
:100B000019F40E94431801C028980E94BF070E9450 |
:100B000019F40E94341801C028980E94BF070E945F |
:100B10002D0880E090E00E94A60B882319F28091B6 |
:100B20002202882329F088B190E1892788B901C081 |
:100B3000449884EF91E00E949D0BB4CF1F920F92D6 |
229,7 → 229,7 |
:100E4000551F8E2F8295869586958370842B835CA3 |
:100E50008A83EF73E35CEB830C5F1F4F1496772359 |
:100E600009F0B7CFC8010E94A606E6E0CDB7DEB70D |
:100E70000C94F92E1F93CF93DF93EC0170E0A22F17 |
:100E70000C94EA2E1F93CF93DF93EC0170E0A22F26 |
:100E8000BB27129748C0E42FFF27E754FC4F30815F |
:100E90004F5FE42FFF27E754FC4F50814F5FE42F53 |
:100EA000FF27E754FC4F10814F5FE42FFF27E754E3 |
254,16 → 254,16 |
:100FD00054E06091750284E40E94D40610928E0160 |
:100FE0008AEF90E00E949D0B9093A3038093A2034D |
:100FF00080918D018823F1F0809100018823D1F048 |
:101000000E94661010928D0180919A018F5F8093EB |
:101000000E94571010928D0180919A018F5F8093FA |
:101010009A01843011F410929A0180919A0144E16E |
:10102000849FA0011124485E5E4F24E160E0805D52 |
:101030000E94D40680918F01882371F08091000175 |
:10104000882351F02AE04FEA53E06091750286E56B |
:101050000E94D40610928F010895A2E0B0E0E3E36D |
:10106000F8E00C94E02E80919101882309F48FC060 |
:10106000F8E00C94D12E80919101882309F48FC06F |
:101070008FEF809301018091BB039927AA27BB279B |
:10108000FC01E356F040E431F10508F07EC0E85C75 |
:10109000FF4F0C94082F2091940143E06BE084EA09 |
:10109000FF4F0C94F92E2091940143E06BE084EA19 |
:1010A00093E00E943A078091C8019091A603892B92 |
:1010B0008093C80181E080938E0167C020919401E4 |
:1010C00043E062E0CE0101960E943A078091C80198 |
278,8 → 278,8 |
:101150001CC02091940143E06AE38FED94E00E946B |
:101160003A078091BB034AE36FED74E08B560E940F |
:10117000B8038091BB038B56A2E0B0E0082E0E941A |
:101180001B2F0E94B1030E94462210929101E3E0BE |
:10119000CE5F0C94FC2E982F80918104813069F4ED |
:101180000C2F0E94B1030E94372210929101E3E0DC |
:10119000CE5F0C94ED2E982F80918104813069F4FC |
:1011A0008091C701E82FFF27E85EFE4F90838F5F95 |
:1011B0008093C70121E030E005C0892F0E9492078B |
:1011C000282F3327C90108951F93182F04C080E3E7 |
291,7 → 291,7 |
:101220000F931F93CF93DF938C01EB0106C0F8015E |
:1012300081918F010E94CB0821972097C1F7DF9100 |
:10124000CF911F910F910895A3E3B0E0EAE2F9E096 |
:101250000C94D12E29968FAD299780938104CE01CD |
:101250000C94C22E29968FAD299780938104CE01DC |
:10126000855B9F4F9D838C832B968EAD9FAD2B9777 |
:101270009FA78EA722243324210102C01301240139 |
:101280000EA51FA502C00F5F1F4FF801F490FF20AD |
337,7 → 337,7 |
:10150000C114D10489F488E28E838EE68F8385E747 |
:1015100088878CE689878A8789E28B871C8666E0C4 |
:10152000C62ED12CCC0EDD1EF9A9F7FD13C04F2F0E |
:10153000552747FD509560E070E0C6010E94D92C08 |
:10153000552747FD509560E070E0C6010E94CA2C17 |
:10154000009711F419A90DC08C1919A981174CF431 |
:10155000182F07C0F60101900020E9F731971E2FE0 |
:101560001C1919824201310140E094C085E5B8168A |
350,10 → 350,10 |
:1015D000510461F4E9A9EE2349F466247724430118 |
:1015E0005EE2C52ED12CCC0EDD1E3EC04EE2C42ED6 |
:1015F000D12CCC0EDD1EF8A9EF2EFF2400271127D9 |
:10160000C201B101A80197010E94942E6A3020F412 |
:10160000C201B101A80197010E94852E6A3020F421 |
:1016100030E3A32EA60E08C027E5A22EA60E88E56D |
:10162000B81611F49FEDA922F601A2926F01C20132 |
:10163000B101A80197010E94942E39014A012E148C |
:10163000B101A80197010E94852E39014A012E149B |
:101640003F044006510618F019012A01D9CFF8A924 |
:10165000F83051F48BA983FF07C090E3A91621F05D |
:1016600080E3F60182936F01CE018C19182F125D71 |
369,7 → 369,7 |
:10170000F0E24F16510421F48AA98A190E94E408D4 |
:10171000802F0E94E408612F772767FD7095C6012E |
:101720000E941009E4FEAACD8AA98A190E94EF0836 |
:10173000A5CDE2E1CD5C0C94ED2E2091A30130917A |
:10173000A5CDE2E1CD5C0C94DE2E2091A301309189 |
:10174000A4012F5F3F4F820F931F08952091A301A3 |
:101750003091A401821B930B892F99278695807461 |
:10176000992708951F920F920FB60F921124EF92AE |
380,12 → 380,12 |
:1017B000D093A901C093A80180910505E09001058F |
:1017C00080FF1EC06091DB017091DC018091DD0122 |
:1017D0009091DE01FF240027112720E830E040E04F |
:1017E00050E00E94B62EC801B7010E944E2E20E0A4 |
:1017F00032E040E050E00E94B62EC20FD31F1DC061 |
:1017E00050E00E94A72EC801B7010E943F2E20E0C2 |
:1017F00032E040E050E00E94A72EC20FD31F1DC070 |
:101800006091DB017091DC018091DD019091DE013E |
:10181000FF240027112720E830E040E050E00E943C |
:10182000B62EC801B7010E944E2E20E032E040E003 |
:1018300050E00E94B62EC21BD30BD093A901C093D7 |
:10182000A72EC801B7010E943F2E20E032E040E021 |
:1018300050E00E94A72EC21BD30BD093A901C093E6 |
:10184000A8012091A8013091A90180910205992752 |
:101850002817390734F080910305992782179307D9 |
:1018600024F49093A9018093A8018091A80180930A |
402,1119 → 402,1117 |
:101910008091D201882329F08091D2018150809357 |
:10192000D2018091A6019091A701029758F0809171 |
:10193000A6019091A70101979093A7018093A6011A |
:101940005A9A01C05A988091E70483FF43C00E94CD |
:101950004116809102019091030101979093030138 |
:101940005A9A01C05A988091E70483FF34C00E94DC |
:101950003216809102019091030101979093030147 |
:101960008093020180910201909103018F5F9F4F4C |
:1019700089F50E94CF1440910B0250910C029A01FC |
:10198000220F331F240F351F820F931F64E070E076 |
:101990000E94812E70930C0260930B0280910B02C7 |
:1019A00090910C0220910D0230910E02821B930B3C |
:1019B000845E9D4F68E671E00E94812E845B9040BA |
:1019C0009093100280930F0284ED93E090930301B3 |
:1019D00080930201FF91EF91BF91AF919F918F9101 |
:1019E0007F916F915F914F913F912F910F900FBE1B |
:1019F0000F901F9018958091A3019091A4010B96D0 |
:101A00009093AC018093AB0182E085BD83EA84BDF5 |
:101A100017BC88E788BD83EC8093B00086E0809394 |
:101A2000B100E0E7F0E0808182608083EEE6F0E0E4 |
:101A30008081816080838AE08093B3001092B2003D |
:101A400008952091A3013091A4012F5F3F4F280FEB |
:101A5000391F8091A3019091A401A901481B590B42 |
:101A600057FFF7CF089510927C008FEC80937A0097 |
:101A700008951F920F920FB60F921124EF92FF92CA |
:101A80000F931F932F933F934F935F936F937F9386 |
:101A90008F939F93AF93BF93CF93DF93EF93FF9376 |
:101AA00010927A008091C3018F5F8093C3018150AF |
:101AB000E82FFF27E830F10508F0B6C2E45BFF4FDE |
:101AC0000C94082F2091D7013091D8018091780093 |
:101AD00090917900281B390B8091B1019091B2014E |
:101AE000820F931F9093B2018093B1018091BB014B |
:101AF0008F5F8093BB018091FF0190910002A091C4 |
:101B00000102B0910202442737FD4095542F820F05 |
:101B1000931FA41FB51F8093FF0190930002A09311 |
:101B20000102B09302028091030290910402A091FD |
:101B30000502B0910602820F931FA41FB51F809368 |
:101B4000030290930402A0930502B093060281E081 |
:101B50008093C4018091C1019091C201019690933C |
:101B6000C2018093C10164C26091780070917900D4 |
:101B70008091D5019091D601681B790B8091F70176 |
:101B80009091F801A091F901B091FA019B014427CD |
:101B900037FD4095542F820F931FA41FB51F8093CC |
:101BA000F7019093F801A093F901B093FA018091A5 |
:101BB000FB019091FC01A091FD01B091FE01820F0B |
:101BC000931FA41FB51F8093FB019093FC01A0936A |
:101BD000FD01B093FE0180917800909179000A9701 |
:101BE00010F464E47DEF8091780090917900895E33 |
:101BF000934010F06CEB72E08091AF019091B001D6 |
:101C0000860F971F9093B0018093AF018091BA0126 |
:101C10008F5F8093BA0182E058C060917800709124 |
:101C200079008091D3019091D401681B790B809148 |
:101C3000EF019091F001A091F101B091F2019B01AF |
:101C4000442737FD4095542F820F931FA41FB51FC3 |
:101C50008093EF019093F001A093F101B093F20112 |
:101C60008091F3019091F401A091F501B091F601FA |
:101C7000820F931FA41FB51F8093F3019093F4016B |
:101C8000A093F501B093F6018091780090917900CE |
:101C90000A9710F464E47DEF8091780090917900C8 |
:101CA000895E934010F06CEB72E08091AD019091F1 |
:101CB000AE01860F971F9093AE018093AD01809186 |
:101CC000B9018F5F8093B90184E08093C401B0C1F2 |
:101CD0004091060150910701809178009091790020 |
:101CE0009A01220F331F240F351F63E070E00E941A |
:101CF0006D2E260F371F36952795369527953093ED |
:101D000007012093060186E0E0CF20917800309112 |
:101D100079008091260590912705821B930B909363 |
:101D20008304809382048091B3019091B401209147 |
:101D3000820430918304820F931F9093B4018093A7 |
:101D4000B3018091BD018F5F8093BD0187E0BDCF5E |
:101D5000809178009091790020912405309125059B |
:101D6000821B930B90938E0480938D048091B50118 |
:101D70009091B60120918D0430918E04820F931FB3 |
:101D80009093B6018093B5018091BC018F5F8093E1 |
:101D9000BC0185E08093C40186E0CBC060917800EF |
:101DA00070917900E0902805F090290500912A05AE |
:101DB00010912B05882777FD8095982F0E948C2DF8 |
:101DC000A80197010E94E62C0E946F2D7093B80124 |
:101DD0006093B7012091B7013091B801E09182047E |
:101DE000F091830480918D0490918E0497FF03C03D |
:101DF000909581959F4F64E070E00E94812EEB01E9 |
:101E0000CF01F7FF03C0909581959F4F64E070E08C |
:101E10000E94812E260F371F2C0F3D1F3093B801D3 |
:101E20002093B7018091B7019091B80102979CF07F |
:101E300020E030E048E454E4C801B7010E94962D48 |
:101E4000882354F52AE037ED43EA5CE3C801B70183 |
:101E50000E94E72C19C08091B7019091B8018F5F63 |
:101E60009F4FD4F420E030E046E154E4C801B701CC |
:101E70000E94992D181684F42AE037ED43EA5CE3BA |
:101E8000C801B7010E94E62C6093280570932905CC |
:101E900080932A0590932B0581E08093BE01809169 |
:101EA0007800909179009093850480938404209128 |
:101EB0000702309108024091090250910A02809174 |
:101EC000B7019091B801AA2797FDA095BA2F280FC6 |
:101ED000391F4A1F5B1F209307023093080240936B |
:101EE000090250930A02E0900702F0900802009164 |
:101EF000090210910A026091070270910802809114 |
:101F0000090290910A0220E034E040E050E00E9493 |
:101F1000B62EE21AF30A040B150BE0920702F092B8 |
:101F200008020093090210930A0283E08093C4011F |
:101F300087E08093C3017CC08091920490919304C8 |
:101F40002091780030917900820F931F9093930431 |
:101F50008093920480918A048F5F80938A04809199 |
:101F60008A04853008F460C08091780090917900EF |
:101F700090930D0180930C0110928A048091860445 |
:101F8000909187042091920430919304821B930BCB |
:101F90002091230230912402821B930B9093C00165 |
:101FA0008093BF016091920470919304E0900801C6 |
:101FB000F090090100910A0110910B01882777FD2B |
:101FC0008095982FA8019701220F331F441F551F9A |
:101FD0002E0D3F1D401F511F620F731F841F951F41 |
:101FE00024E030E040E050E00E94B62E209308014B |
:101FF0003093090140930A0150930B01209186040C |
:10200000309187048091080190910901A0910A0103 |
:10201000B0910B01281B390B30932402209323022B |
:1020200010929304109292041092C4011092C30172 |
:102030008091C40180937C008FEC80937A00FF91A3 |
:10204000EF91DF91CF91BF91AF919F918F917F9150 |
:102050006F915F914F913F912F911F910F91FF9041 |
:10206000EF900F900FBE0F901F901895CF93DF93B6 |
:10207000C0E0D0E0C7BD82E390E00E94210D8BEC70 |
:1020800091E09F938F931F920E94240980910C01ED |
:1020900090910D010F900F900F908458934020F075 |
:1020A0002196CA3FD10531F7C0938F0488EC90E0A8 |
:1020B0000E94210DDF91CF910895E8E1F1E080E2E7 |
:1020C000819391E0E836F907D9F70895FF920F93CD |
:1020D0001F938091C801282F3327C9018170907008 |
:1020E000682F882391F08091C901882311F08150D5 |
:1020F00002C0809168018093C901E8E1F1E080E2CB |
:10210000819391E0E836F907D9F7A9014270507040 |
:1021100021FF0DC08091C9018F5F8093C901E8E163 |
:10212000F1E080E2819391E0E836F907D9F7662380 |
:1021300021F0452B11F01092C90181E18093C70174 |
:102140008091C90199279F938F9385EA94E09F938B |
:102150008F9381E08F930E9424098091C9010F9091 |
:102160000F900F900F900F90E82FFF27ED30F105A3 |
:1021700008F0BCC3EC5AFF4F0C94082F1092C70113 |
:1021800083E994E09F938F9311E01F930E942409A9 |
:1021900084E18093C7018CE390E09F938F931F921B |
:1021A0001F928CE894E09F938F931F930E942409C1 |
:1021B00088E28093C7010E94B10399279F938F9370 |
:1021C0008FE794E09F938F931F930E9424098CE3E1 |
:1021D0008093C7018FE694E09F938F931F930E9493 |
:1021E000240980C38091E70480FF44C01092C70196 |
:1021F00080912302909124029F938F9380E694E034 |
:102200009F938F9311E01F930E94240984E1809390 |
:10221000C70180912502909126029F938F9381E5BB |
:1022200094E09F938F931F930E94240988E28093E8 |
:10223000C70180910C0190910D019F938F9382E4CF |
:1022400094E09F938F931F930E9424098CE38093C3 |
:10225000C70180918F0499279F938F9383E394E024 |
:102260009F938F931F930E9424098DB79EB7449626 |
:102270008DBF41C384E18093C7018CE294E09F93BA |
:102280008F9311E01F930E94240988E28093C70175 |
:102290008EE194E09F938F931F930E9424098DB742 |
:1022A0009EB70696E5CF1092C70184E194E09F9314 |
:1022B0008F9311E01F930E94240984E18093C7014A |
:1022C0006091DB017091DC018091DD019091DE0174 |
:1022D00020E034E040E050E00E94B62E5F934F9340 |
:1022E0003F932F9385E094E09F938F931F930E94D9 |
:1022F000240988E28093C7016091E3017091E401B1 |
:102300008091E5019091E60120E034E040E050E06A |
:102310000E94B62E5F934F933F932F9386EF93E0E7 |
:102320009F938F931F930E9424098CE38093C7018E |
:1023300080910B0290910C029F938F9387EE93E014 |
:102340009F938F931F930E9424098DB79EB7469643 |
:102350008FCF1092C7018091B7049091B80420915B |
:10236000B5043091B6049F938F933F932F9387EDDD |
:1023700093E09F938F9311E01F930E94240984E1BF |
:102380008093C7018091BB049091BC042091B90453 |
:102390003091BA049F938F933F932F9387EC93E0F0 |
:1023A0009F938F931F930E94240988E28093C70113 |
:1023B0008091BF049091C0042091BD043091BE046F |
:1023C0009F938F933F932F9387EB93E09F938F93EC |
:1023D0001F930E9424098CE38093C7018091C1045C |
:1023E0009091C2049F938F9387EA93E070C01092FC |
:1023F000C701E091E004FF27EE0FFF1FED54FB4FF4 |
:1024000020813181E091DF04FF27EE0FFF1FED54A3 |
:10241000FB4F808191813F932F939F938F9387E907 |
:1024200093E09F938F9311E01F930E94240984E10E |
:102430008093C701E091E204FF27EE0FFF1FED54E8 |
:10244000FB4F20813181E091E104FF27EE0FFF1F58 |
:10245000ED54FB4F808191813F932F939F938F93F6 |
:1024600087E893E09F938F931F930E94240988E24B |
:102470008093C701E091E404FF27EE0FFF1FED54A6 |
:10248000FB4F20813181E091E304FF27EE0FFF1F16 |
:10249000ED54FB4F808191813F932F939F938F93B6 |
:1024A00087E793E09F938F931F930E9424098CE307 |
:1024B0008093C701E091E504FF27EE0FFF1FED5465 |
:1024C000FB4F808191819F938F9387E693E09F9349 |
:1024D0008F931F930E9424098DB79EB74A96C8CE4A |
:1024E0001092C70189E593E09F938F9311E01F93AA |
:1024F0000E94240984E18093C7012091D301309187 |
:10250000D4018091AD019091AE016091B9013F93EA |
:102510002F9377270E94812E7F936F938AE493E015 |
:102520009F938F931F930E94240988E28093C70191 |
:102530002091D5013091D6018091AF019091B001E9 |
:102540006091BA013F932F9377270E94812E7F934A |
:102550006F938BE393E09F938F931F930E942409C3 |
:102560008CE38093C7012091D7013091D8018091ED |
:10257000B1019091B2016091BB013F932F937727F6 |
:102580000E94812E7F936F938CE293E09F938F93B1 |
:102590001F935BC01092C7018FE193E09F938F93CD |
:1025A00081E0F82EFF920E94240984E18093C70104 |
:1025B0008091B5019091B6016091BC0120912405F4 |
:1025C000309125053F932F9377270E94812E7F938B |
:1025D0006F9380E193E09F938F93FF920E94240971 |
:1025E00088E28093C7018091B3019091B40160911A |
:1025F000BD0120912605309127053F932F93772722 |
:102600000E94812E7F936F9381E093E09F938F933D |
:10261000FF920E9424098CE38093C70100918404F7 |
:1026200010918504609128057091290580912A05F3 |
:1026300090912B050E946F2D7F936F931F930F93A3 |
:1026400082EF92E09F938F93FF920E9424098DB7AF |
:102650009EB748960DCE84E18093C7018091060114 |
:10266000909107019F938F9383EE92E09F938F93B6 |
:1026700011E01F930E94240988E28093C701809192 |
:102680001B0299279F938F9384ED92E09F938F93E2 |
:102690001F930E9424098DB79EB70A96E9CD109228 |
:1026A000C70185EC92E09F938F9311E01F930E94E6 |
:1026B000240984E18093C70180910F029091100258 |
:1026C0009F938F9386EB92E09F938F931F930E942B |
:1026D000240988E28093C70180910B0290910C023B |
:1026E0009F938F9387EA92E09F938F931F930E940B |
:1026F00024098CE38093C70180910D0290910E0212 |
:102700009F938F9388E992E0E8C01092C70180916F |
:102710001302909114029F938F938CE892E09F9301 |
:102720008F9311E01F930E94240984E18093C701D5 |
:1027300080911502909116029F938F9380E892E00A |
:102740009F938F931F930E94240988E28093C7016F |
:1027500080911702909118029F938F9384E792E0E3 |
:102760009F938F931F930E9424098CE38093C7014A |
:102770008091190290911A029F938F9388E692E0BC |
:102780006FCD1092C70180E692E09F938F9311E086 |
:102790001F930E94240984E18093C70180918B01DB |
:1027A00099279F938F9382E592E09F938F931F9336 |
:1027B0000E94240988E28093C7018091A80190912A |
:1027C000A9019F938F9384E492E09F938F931F932B |
:1027D0000E9424098CE38093C70180910305992707 |
:1027E0009F938F938091020599279F938F9386E300 |
:1027F00092E09F938F931F930E94240936CD1092ED |
:10280000C7018EE292E09F938F9311E01F930E9485 |
:10281000240984E18093C70180919404992787FD5E |
:1028200090959F938F938FE192E09F938F931F9347 |
:102830000E94240988E28093C7018091950499271A |
:1028400087FD90959F938F9380E192E09F938F9364 |
:102850001F930E9424098CE38093C7018091960402 |
:10286000992787FD90959F938F9381E092E035C0E3 |
:102870001092C70187EF91E09F938F9311E01F9310 |
:102880000E94240984E18093C7018091970490916C |
:1028900098049F938F9389EE91E09F938F931F935A |
:1028A0000E94240988E28093C70180919904909145 |
:1028B0009A049F938F938BED91E09F938F931F9337 |
:1028C0000E9424098CE38093C70180919B0490911E |
:1028D0009C049F938F938DEC91E09F938F931F9314 |
:1028E0000E9424098DB79EB74296C2CC8150809336 |
:1028F00068011092C9011092C8011F910F91FF90B9 |
:1029000008951F920F920FB60F9211242F933F93A9 |
:102910004F938F939F9380919D04833019F084305F |
:10292000A1F508C08EB58093CA011EBC84E08093D7 |
:102930009D042BC08091CA019927382F22278EB57C |
:102940009927282B392BC9018D509E4F875E9340C4 |
:10295000D0F48091A004853019F0863069F406C067 |
:102960003093A2042093A10486E00BC03093A4040A |
:102970002093A30487E005C03093A6042093A50408 |
:1029800085E08093A00410929D049F918F914F91B8 |
:102990003F912F910F900FBE0F901F901895A0E1BF |
:1029A000B0E0E5EDF4E10C94D12E6091DB01709183 |
:1029B000DC018091DD019091DE01E090FC04FF24B8 |
:1029C00033E0EE0CFF1C3A95E1F700271127A80130 |
:1029D00097010E94B62EDA01C9013093A804209312 |
:1029E000A7040E94DB176D877E878F87988B809165 |
:1029F000A7049091A8040E943B1869877A878B8767 |
:102A00009C876091E3017091E4018091E5019091D0 |
:102A1000E601A80197010E94B62EDA01C9013093A0 |
:102A2000AA042093A9040E94DB176D837E838F8301 |
:102A300098878091A9049091AA040E943B18698309 |
:102A40007A838B839C8380919404992787FD90954A |
:102A5000A090A104B090A204A81AB90A809195048C |
:102A6000992787FD90958090A3049090A404881ADC |
:102A7000990A80919604992787FD90954090A50426 |
:102A80005090A604481A590A209097043090980450 |
:102A9000C0909904D0909A04C214D304D0F46090EA |
:102AA0009B0470909C046214730498F471010027D5 |
:102AB0001127B401882777FD8095982FA8019701E9 |
:102AC0000E944E2E9601442755270E94B62E49019A |
:102AD0001CC02C143D0448F560909B0470909C042D |
:102AE0006C147D0410F5760100271127B5018827A5 |
:102AF00077FD8095982FA80197010E944E2E910195 |
:102B0000442755270E94B62E5901B201882777FD28 |
:102B10008095982FA80197010E944E2E930144277B |
:102B200055270E94B62E290124C0E0909B04F09006 |
:102B30009C0400271127B501882777FD8095982FE1 |
:102B4000A80197010E944E2E9101442755270E940B |
:102B5000B62E5901B401882777FD8095982FA801DA |
:102B600097010E944E2E9601442755270E94B62EAB |
:102B70004901B0927404A0927304909276048092FA |
:102B800075045092780440927704B501882777FD48 |
:102B90008095982F0E948C2D29853A854B855C85E0 |
:102BA0000E94062E5B016C01B401882777FD809599 |
:102BB000982F0E948C2D7B018C012D813E814F81AD |
:102BC00058850E94062E2D853E854F8558890E9486 |
:102BD000062E9B01AC01C601B5010E94E72C3B010A |
:102BE0004C01B201882777FD8095982F0E948C2D8B |
:102BF0005B016C0129813A814B815C81C801B7017D |
:102C00000E94062E7B018C012D813E814F815885CB |
:102C1000C601B5010E94062E9B01AC01C801B70197 |
:102C20000E94E72C0E946F2D7B018C0129813A8143 |
:102C30004B815C81C601B5010E94062E2D853E8523 |
:102C40004F8558890E94062E9B01AC01C401B30137 |
:102C50000E94E62C0E946F2DDC01CB01B7010E947F |
:102C600033179C0197FF05C088279927821B930B78 |
:102C700004C088E691E0821B930BE2E1C05F0C94F4 |
:102C8000ED2E80919D04813041F0813018F082302A |
:102C900059F51EC02A9A81E018C02A988091A00494 |
:102CA000853011F481E307C0863011F482E303C05C |
:102CB000873011F483E38EBD85E090E00E949D0B88 |
:102CC00090939F0480939E0482E080939D040895D6 |
:102CD00080919E0490919F040E94A60B882321F06E |
:102CE0001EBC83E080939D040895A0E0B0E0EBE774 |
:102CF000F6E10C94D32E299A2898EE24FF24AA24D6 |
:102D0000BB24CC24DD24662477248824992462E320 |
:102D1000462E552400E010E08091A1049091A20479 |
:102D20000817190714F48C0104C08E159F050CF4C4 |
:102D30007C018091A3049091A404C816D90614F4D0 |
:102D40006C0104C08A159B050CF45C018091A504FC |
:102D50009091A6048816990614F44C0104C08615B7 |
:102D600097050CF43C01552081F485B191E0892749 |
:102D700085B985B192E0892785B982E390E0909387 |
:102D8000A7018093A60152E3552E8AE090E00E94AD |
:102D90009D0BEC01CE010E94A60B8823D9F3E09194 |
:102DA000E104FF27EE0FFF1FED54FB4F808191815F |
:102DB000843691050CF44A94442011F05A94ACCF17 |
:102DC000C8018E199F099093980480939704C601B7 |
:102DD0008A199B0990939A0480939904C4018619D7 |
:102DE000970990939C0480939B04E4E9F4E0C80164 |
:102DF0008E0D9F1D62E070E00E94812E609394040E |
:102E0000C6018A0D9B1D62E070E00E94812E6093D6 |
:102E10009504C401860D971D62E070E00E94812E2A |
:102E20006093960489E0ACE2B1E0182E0E94272F4F |
:102E3000E0E1CDB7DEB70C94EF2E82ED8CBD81E0E2 |
:102E40008DBD84B1846A84B95B9885E08093A004C9 |
:102E500010929D0489E0E4E9F4E0ACE2B1E0182EC0 |
:102E60000E94162F08951F93CF93DF93EC01892BB7 |
:102E700031F46115710519F480E090E08EC077FDA2 |
:102E800002C011E001C01FEF209729F48AE5180263 |
:102E9000C001112482C0882777FD8095982F22E3F6 |
:102EA00030E040E050E00E944E2E9E01442737FD66 |
:102EB0004095542F0E94B62EF90137FF03C0F095BC |
:102EC000E195FF4F41E0EE30F40734F4E655FB4F57 |
:102ED0008491282F332747C056E1E737F5071CF0C8 |
:102EE0002AE530E040C087E0E637F8071CF029E526 |
:102EF00030E039C044E0EE37F4071CF028E530E05C |
:102F000032C053E0E433F5071CF027E530E02BC076 |
:102F100082E0E038F8071CF026E530E024C042E00B |
:102F2000E830F4071CF025E530E01DC051E0E83B37 |
:102F3000F5071CF024E530E016C081E0EC37F80717 |
:102F40001CF023E530E00FC041E0EF34F4071CF043 |
:102F500022E530E008C0EB52F1401CF021E530E002 |
:102F600002C020E530E01C161D066CF4812F992765 |
:102F700087FD9095AC01249FC001259F900D349F43 |
:102F8000900D11240AC011162CF484EB90E0821BE2 |
:102F9000930B03C0C901845B9040DF91CF911F91D7 |
:102FA0000895FC0125913491FC013296459154918C |
:102FB000CA01B9010895A0E0B0E0E1EEF7E10C9498 |
:102FC000DB2E9C0197FD04C041E0C42ED12C06C02D |
:102FD000309521953F4F9FEFC92ED92E2B353105C6 |
:102FE0005CF0C9018B5590408A35910540F484EB23 |
:102FF00090E0821B930B9C01C1E0D0E010C0C9019E |
:10300000855B90408A35910518F4245B304005C0FB |
:1030100088E691E0821B930B9C01CFEFDFEF220F3C |
:10302000331F220F331FC90188549A4F0E94D117B2 |
:103030007B018C01B601882777FD8095982F0E942F |
:103040008C2D9B01AC01C801B7010E94062E7B01AB |
:103050008C01BE01882777FD8095982F0E948C2DCA |
:103060009B01AC01C801B7010E94062EE8E0CDB774 |
:10307000DEB70C94F72E2AE530E0281B390BC90186 |
:103080000E94DB1708951092B9008AE28093B8007D |
:10309000089585EA8093BC0080E090E0089584E97B |
:1030A0008093BC0008951092B9008093BB0085E81E |
:1030B0008093BC0080E090E008951F920F920FB6BD |
:1030C0000F9211248F939F93EF93FF938091CB01E5 |
:1030D0008F5F8093CB018150E82FFF27E830F10507 |
:1030E00008F074C0EF59FF4F0C94082F8091CC0169 |
:1030F000880F8E5A14C08091CC018F5F8093CC01D1 |
:103100008150813009F444C0813038F0823009F4B4 |
:1031100042C0833009F05AC041C0809166021092CB |
:10312000B9008093BB0085E88093BC004FC084E960 |
:103130008093BC008091CC01843018F41092CB01B4 |
:1031400002C01092CC0185EAEFCF8091CD01880FAB |
:103150008D5AE5CF8091CD018130D1F08130E8F2F8 |
:103160008230C9F0833091F519C08091BB00E091A5 |
:10317000CD01FF27E555FB4F80838091CD01813044 |
:1031800039F0813050F2823031F08330F9F406C0EA |
:1031900080916702C4CF80916A02C1CF80916C0296 |
:1031A000BECF8091CD019091BB00E82FFF27E55560 |
:1031B000FB4F94838F5F8093CD01843010F0109289 |
:1031C000CD0184E98093BC001092CB01FF91EF9177 |
:1031D0009F918F910F900FBE0F901F90189583ECC9 |
:1031E00080938100EFE6F0E080818062808310921E |
:1031F000D8011092D7011092D6011092D5011092E9 |
:10320000D4011092D30108951F920F920FB60F921E |
:1032100011240F931F932F933F934F935F936F93BB |
:103220007F938F939F93AF93BF93CF93DF93EF934E |
:10323000FF9320918600309187008091D00190917A |
:10324000D101281B390B80918600909187009093C3 |
:10325000D1018093D001C9018D5D9540835699417C |
:1032600048F481E090E09093CF018093CE011092DA |
:10327000690154C0C091CE01D091CF01CA30D105AF |
:103280000CF04CC0C9018B5F9040845B914008F00A |
:1032900040C0A901425D5140FE01EE0FFF1FED54F9 |
:1032A000FB4F80819181FA01E81BF90BCF01F7FFF9 |
:1032B00003C0909581959F4F06974CF480911B0217 |
:1032C000883C28F480911B02865F80931B02FE01DC |
:1032D000EE0FFF1F8F010D541B4FD8012D913C9114 |
:1032E000C901880F991F820F931F840F951F64E0F7 |
:1032F00070E00E94812ED8018D919C9111979B01C5 |
:10330000281B390BE753FB4F3183208311967C93A5 |
:103310006E932196D093CF01C093CE01FF91EF9190 |
:10332000DF91CF91BF91AF919F918F917F916F91DD |
:103330005F914F913F912F911F910F910F900FBE71 |
:103340000F901F901895AF92BF92CF92DF92EF929D |
:10335000FF920F931F9310927A008091B9018823F6 |
:1033600069F08091AD019091AE016091B90177272C |
:103370000E94812E70931C0560931B058091BA01F9 |
:10338000882369F08091AF019091B0016091BA01FA |
:1033900077270E94812E70931A05609319058091FA |
:1033A000BB01882369F08091B1019091B2016091D5 |
:1033B000BB0177270E94812E7093300560932F0503 |
:1033C0008091BC018823D9F1E0902C05F0902D0567 |
:1033D0006091B5017091B6012091BC010027F7FC06 |
:1033E0000095102F5701680183E0AA0CBB1CCC1C70 |
:1033F000DD1C8A95D1F7AE18BF08C00AD10A88270C |
:1034000077FD8095982FB4E0660F771F881F991F6E |
:10341000BA95D1F73327442755270E94B62EA20E1E |
:10342000B31EC41ED51EC601B50128E030E040E041 |
:1034300050E00E94B62E30932D0520932C058091EC |
:10344000BD018823D9F1E0903505F09036056091F3 |
:10345000B3017091B4012091BD010027F7FC0095E4 |
:10346000102F57016801A3E0AA0CBB1CCC1CDD1C6B |
:10347000AA95D1F7AE18BF08C00AD10A882777FDF0 |
:103480008095982FF4E0660F771F881F991FFA9593 |
:10349000D1F73327442755270E94B62EA20EB31E1C |
:1034A000C41ED51EC601B50128E030E040E050E062 |
:1034B0000E94B62E30933605209335058091BE01CB |
:1034C0008823A1F1E0901E05F0901F056091B701DF |
:1034D0007091B8012091BE010027F7FC0095102FD4 |
:1034E00057016801E3E0AA0CBB1CCC1CDD1CEA956B |
:1034F000D1F7AE18BF08C00AD10A882777FD80959A |
:10350000982F3327442755270E94B62EA20EB31EAC |
:10351000C41ED51EC601B50128E030E040E050E0F1 |
:103520000E94B62E30931F0520931E051092AE0107 |
:103530001092AD011092B9011092B0011092AF013A |
:103540001092BA011092B2011092B1011092BB0117 |
:103550001092B4011092B3011092BD011092B60105 |
:103560001092B5011092BC011092B8011092B701EF |
:103570001092BE018091FF0190910002A091010282 |
:10358000B09102028093EB019093EC01A093ED01C6 |
:10359000B093EE018091EF019091F001A091F101C3 |
:1035A000B091F2018093DB019093DC01A093DD01E7 |
:1035B000B093DE018091F7019091F801A091F9019B |
:1035C000B091FA018093E3019093E401A093E501A7 |
:1035D000B093E6018091F3019091F401A091F5017F |
:1035E000B091F6018093DF019093E001A093E10197 |
:1035F000B093E2018091FB019091FC01A091FD014B |
:10360000B091FE018093E7019093E801A093E90156 |
:10361000B093EA018FEC80937A00209113023091ED |
:1036200014028091E304E82FFF27EE0FFF1FED54F3 |
:10363000FB4F8081918182599F4F281739071CF4D5 |
:103640002F5F3F4F0CC08081918182599F4F82171D |
:1036500093074CF42115310531F02150304030935F |
:1036600014022093130220911502309116028091CA |
:10367000E404E82FFF27EE0FFF1FED54FB4F80817E |
:10368000918182599F4F281739071CF42F5F3F4FB4 |
:103690000CC08081918182599F4F821793074CF40F |
:1036A0002115310531F0215030403093160220931E |
:1036B000150220911702309118028091E504E82F3D |
:1036C000FF27EE0FFF1FED54FB4F80819181825940 |
:1036D0009F4F281739071CF42F5F3F4F0CC0808184 |
:1036E000918182599F4F821793074CF42115310520 |
:1036F00031F021503040309318022093170220916E |
:10370000190230911A028091E604E82FFF27EE0F8C |
:10371000FF1FED54FB4F8081918182599F4F2817E5 |
:1037200039071CF42F5F3F4F0CC080819181825973 |
:103730009F4F821793074CF42115310531F021502A |
:10374000304030931A022093190280911302909115 |
:10375000140297FF05C010921402109213020AC0BF |
:103760008F3F910539F034F08FEF90E09093140281 |
:1037700080931302809115029091160297FF05C065 |
:1037800010921602109215020AC08F3F910539F06F |
:1037900034F08FEF90E090931602809315028091A1 |
:1037A00017029091180297FF05C01092180210920C |
:1037B00017020AC08F3F910539F034F08FEF90E087 |
:1037C00090931802809317028091190290911A0227 |
:1037D00097FF05C010921A02109219020AC08F3F7B |
:1037E000910539F034F08FEF90E090931A028093B6 |
:1037F00019021F910F91FF90EF90DF90CF90BF9033 |
:10380000AF90089510927A008091B901882369F0F1 |
:103810008091AD019091AE016091B90177270E942E |
:10382000812E70931C0560931B058091BA0188233B |
:1038300069F08091AF019091B0016091BA01772752 |
:103840000E94812E70931A05609319058091BB0127 |
:10385000882369F08091B1019091B2016091BB0120 |
:1038600077270E94812E7093300560932F058091F9 |
:10387000BC018823D1F06091B5017091B60120910F |
:10388000BC01882777FD8095982FF4E0660F771F9D |
:10389000881F991FFA95D1F73327442755270E948F |
:1038A000B62E30932D0520932C058091BD018823E1 |
:1038B000D1F06091B3017091B4012091BD018827CE |
:1038C00077FD8095982FE4E0660F771F881F991F7A |
:1038D000EA95D1F73327442755270E94B62E309317 |
:1038E0003605209335058091BE01882399F06091BB |
:1038F000B7017091B8012091BE01882777FD8095AE |
:10390000982F3327442755270E94B62E30931F0542 |
:1039100020931E051092AE011092AD011092B901D4 |
:103920001092B0011092AF011092BA011092B20140 |
:103930001092B1011092BB011092B4011092B30128 |
:103940001092BD011092B6011092B5011092BC0107 |
:103950001092B8011092B7011092BE018FEC8093C3 |
:103960007A0020911302309114028091E304E82F31 |
:10397000FF27EE0FFF1FED54FB4F8081918182598D |
:103980009F4F281739071CF42F5F3F4F0CC08081D1 |
:10399000918182599F4F821793074CF4211531056D |
:1039A00031F02150304030931402209313022091C3 |
:1039B0001502309116028091E404E82FFF27EE0FE4 |
:1039C000FF1FED54FB4F8081918182599F4F281733 |
:1039D00039071CF42F5F3F4F0CC0808191818259C1 |
:1039E0009F4F821793074CF42115310531F0215078 |
:1039F0003040309316022093150220911702309127 |
:103A000018028091E504E82FFF27EE0FFF1FED5409 |
:103A1000FB4F8081918182599F4F281739071CF4F1 |
:103A20002F5F3F4F0CC08081918182599F4F821739 |
:103A300093074CF42115310531F02150304030937B |
:103A40001802209317022091190230911A028091D6 |
:103A5000E604E82FFF27EE0FFF1FED54FB4F808198 |
:103A6000918182599F4F281739071CF42F5F3F4FD0 |
:103A70000CC08081918182599F4F821793074CF42B |
:103A80002115310531F02150304030931A02209336 |
:103A90001902809113029091140297FF05C01092B1 |
:103AA0001402109213020AC08F3F910539F034F0CE |
:103AB0008FEF90E09093140280931302809115028F |
:103AC0009091160297FF05C01092160210921502EF |
:103AD0000AC08F3F910539F034F08FEF90E090935A |
:103AE000160280931502809117029091180297FF99 |
:103AF00005C010921802109217020AC08F3F91055C |
:103B000039F034F08FEF90E0909318028093170211 |
:103B10008091190290911A0297FF05C010921A0223 |
:103B20001092190208958F3F910539F034F08FEF0C |
:103B300090E090931A028093190208951F93809148 |
:103B4000EA048B3F98F08B3F19F4809113020EC06A |
:103B50008C3F19F48091150209C08D3F19F48091B2 |
:103B6000170204C08E3F21F48091190280938301D3 |
:103B700080918301882319F41092830104C08F3F40 |
:103B800011F4809383018091E9048B3F98F08B3F7F |
:103B900019F4809113020EC08C3F19F48091150224 |
:103BA00009C08D3F19F48091170204C08E3F21F4A3 |
:103BB000809119028093820180918201882319F4F7 |
:103BC0001092820105C0843618F084E68093820149 |
:103BD0008091EB048B3F98F08B3F19F48091130296 |
:103BE0000EC08C3F19F48091150209C08D3F19F465 |
:103BF0008091170204C08E3F21F4809119028093B6 |
:103C0000840180918401882319F41092840105C0F5 |
:103C1000843618F084E6809384018091ED048B3F14 |
:103C200098F08B3F19F4809113020EC08C3F19F469 |
:103C30008091150209C08D3F19F48091170204C0CC |
:103C40008E3F21F480911902809385018091850136 |
:103C5000882319F41092850104C08F3F11F48093DA |
:103C600085018091F4048B3F98F08B3F19F480918B |
:103C700013020EC08C3F19F48091150209C08D3FCC |
:103C800019F48091170204C08E3F21F4809119022B |
:103C90008093860180918601882319F41092860111 |
:103CA00004C08F3F11F4809386018091F5048B3F0F |
:103CB00098F08B3F19F4809113020EC08C3F19F4D9 |
:103CC0008091150209C08D3F19F48091170204C03C |
:103CD0008E3F21F4809119028093870180918701A2 |
:103CE0008B3010F48AE002C08F3F11F4809387017B |
:103CF0008091F6048B3F98F08B3F19F4809113026A |
:103D00000EC08C3F19F48091150209C08D3F19F443 |
:103D10008091170204C08E3F21F480911902809394 |
:103D2000880180918801882319F41092880104C0C9 |
:103D30008F3F11F4809388018091FB048B3F98F0B2 |
:103D40008B3F19F4809113020EC08C3F19F48091BF |
:103D5000150209C08D3F19F48091170204C08E3FEF |
:103D600021F48091190280938A0180918A0188232D |
:103D700019F410928A0104C08F3F11F480938A01D4 |
:103D80008091FC048B3F98F08B3F19F480911302D3 |
:103D90000EC08C3F19F48091150209C08D3F19F4B3 |
:103DA0008091170204C08E3F21F480911902809304 |
:103DB000270280912702882319F41092270204C059 |
:103DC0008F3F11F4809327028091FD048B3F98F080 |
:103DD0008B3F19F4809113020EC08C3F19F480912F |
:103DE000150209C08D3F19F48091170204C08E3F5F |
:103DF00021F480911902809328028091280288235F |
:103E000019F41092280204C08F3F11F48093280205 |
:103E10008091FE048B3F98F08B3F19F48091130240 |
:103E20000EC08C3F19F48091150209C08D3F19F422 |
:103E30008091170204C08E3F21F480911902809373 |
:103E4000290280912902882319F41092290204C0C2 |
:103E50008F3F11F4809329028091FF048B3F98F0EB |
:103E60008B3F19F4809113020EC08C3F19F480919E |
:103E7000150209C08D3F19F48091170204C08E3FCE |
:103E800021F48091190280932A0280912A028823CA |
:103E900019F410922A0204C08F3F11F480932A0271 |
:103EA000909100059B3FB0F09B3F19F48091130265 |
:103EB00004C09C3F29F48091150280938B010CC0B3 |
:103EC0009D3F19F480911702F8CF9E3F29F480910D |
:103ED0001902F3CF90938B0180918B01882319F401 |
:103EE00010928B0104C08F3F11F480938B019B3F94 |
:103EF000B0F09B3F19F48091130204C09C3F29F459 |
:103F00008091150280938B010CC09D3F19F4809124 |
:103F10001702F8CF9E3F29F480911902F3CF9093B6 |
:103F20008B0180918B01882319F410928B0104C0BE |
:103F30008F3F11F480938B019B3FB0F09B3F19F4AE |
:103F40008091130204C09C3F29F480911502809354 |
:103F50008B010CC09D3F19F480911702F8CF9E3F52 |
:103F600029F480911902F3CF90938B0180918B01FA |
:103F7000882319F410928B0104C08F3F11F48093B1 |
:103F80008B0110918A01612F772767FD7095872F2C |
:103F9000972F0E948C2D17FF06C020E030E040E8EC |
:103FA00053E40E94E72C27E137EB41ED58E30E94F0 |
:103FB000062E60937E0170937F0180938001909321 |
:103FC00081018091F20480932E058091F104809309 |
:103FD0001D051F91089581E08093DF0442E0409326 |
:103FE000E00483E08093E10494E09093E20435E000 |
:103FF0003093E30486E08093E40487E08093E50453 |
:104000001092E7048EE18093E8048BEF8093EA043A |
:104010008AE08093EB0422E32093E9042093ED04EB |
:104020004093EC049093EE041092EF0490E190938F |
:10403000F0048FE08093F1048AEF8093F2048AE128 |
:104040008093F3049093F4048FEA8093F5048093B3 |
:10405000F6048AE58093F70483E28093F80484E110 |
:104060008093F9041092FA043093FB0482EB80935E |
:10407000FC041092FD041092FE041092FF0484E6EA |
:104080008093000588E28093010510920505209336 |
:10409000020586E98093030530930405ADE0B5E0A1 |
:1040A000EAE6F1E08CE001900D928150E1F708958D |
:1040B00081E08093DF0452E05093E00483E080933A |
:1040C000E10444E04093E20435E03093E30486E009 |
:1040D0008093E40487E08093E50428E02093E604DD |
:1040E0001092E7049EE19093E8048BEF8093EA043A |
:1040F0008AE08093EB0486E48093E9049093ED04D6 |
:104100005093EC044093EE042093EF0490E19093DD |
:10411000F0048FE08093F1048AEF8093F2048AE147 |
:104120008093F3049093F40488E78093F50496E970 |
:104130009093F6048AE58093F70483E28093F80471 |
:1041400084E18093F9041092FA043093FB0482EB2B |
:104150008093FC041092FD041092FE041092FF0460 |
:1041600084E68093000588E280930105109205059E |
:1041700082E3809302059093030530930405ADE03C |
:10418000B5E0E2E7F1E08CE001900D928150E1F7BB |
:10419000089580912202882301F5109267021092FF |
:1041A000660210926A0210926C0280919601882336 |
:1041B00011F08093660280919701882311F080931B |
:1041C000670280919801882311F080936C0280919E |
:1041D0009901882311F080936A02809166029927E1 |
:1041E00090937A0480937904809167029927909341 |
:1041F0007C0480937B0480916C02992790937E04C9 |
:1042000080937D0480916A02992790938004809323 |
:104210007F041092CB011092CC010E94491808959E |
:10422000CF93DF9310922505109224051092270555 |
:104230001092260580E090E0A0E0B0E08093280591 |
:1042400090932905A0932A05B0932B051092D401D1 |
:104250001092D3011092D6011092D5011092D8017C |
:104260001092D7010E94021C85E090E00E949D0BF5 |
:10427000EC01CE010E94A60B8823D9F30E94021CF8 |
:104280008091E70480FF10C080910C0190910D0196 |
:10429000875B934038F480910C0190910D018E5E04 |
:1042A000924010F40E94361080911B0590911C05DD |
:1042B00097FF03C0909581959F4F9093D401809371 |
:1042C000D3018091190590911A0597FF03C090952D |
:1042D00081959F4F9093D6018093D50180912F05B2 |
:1042E0009091300597FF03C0909581959F4F9093D3 |
:1042F000D8018093D70188E0E4E2F5E0A5E3B1E0DE |
:10430000182E0E94162F1092EF011092F0011092B9 |
:10431000F1011092F2011092F3011092F401109247 |
:10432000F5011092F6011092F7011092F801109227 |
:10433000F9011092FA011092FB011092FC01109207 |
:10434000FD011092FE011092FF01109200021092E6 |
:1043500001021092020210921C0510921B0510928D |
:104360001A05109219051092300510922F058091B0 |
:10437000080190910901A0910A01B0910B0190935D |
:104380008704809386041092C0011092BF0110929E |
:104390000702109208021092090210920A028091FC |
:1043A0000B0290910C0290930E0280930D020E94DA |
:1043B000AF2C82E390E09093A7018093A601DF9158 |
:1043C000CF910895CF93DF93109225051092240585 |
:1043D000109227051092260580E090E0A0E0B0E062 |
:1043E0008093280590932905A0932A05B0932B0567 |
:1043F0000E94021C85E090E00E949D0BEC01CE0122 |
:104400000E94A60B8823D9F30E94021C80912C05E0 |
:1044100090912D05C4E2D5E097FF03C0909581955A |
:104420009F4F60E170E00E94812E7093250560939C |
:104430002405809135059091360597FF03C090952E |
:1044400081959F4F60E170E00E94812E7093270557 |
:10445000609326056091840470918504882777FD18 |
:104460008095982F0E948C2D6093280570932905C4 |
:1044700080932A0590932B0588E0A5E3B1E0FE0127 |
:10448000182E0E94272FDF91CF9108951F93182F88 |
:104490000EC080912202882361F484E690E090931C |
:1044A000A7018093A6018AEF90E00E94210D115090 |
:1044B00080F71F910895A8E0B0E0E1E6F2E20C94E5 |
:1044C000D12E0E94A319299AE091E104AE2FBB27B7 |
:1044D000AA0FBB1FAD54BB4F0D90BC91A02D9D01E9 |
:1044E00028583F4F3A83298337FF02C01A82198226 |
:1044F00080911B02843608F04AC080910101882314 |
:1045000031F484EF91E09093A7018093A60180910C |
:10451000360290913702009731F00197909337025D |
:104520008093360204C01092220210921102289A3F |
:104530008091310290913202815D974028F1809103 |
:10454000F804482F55275A83498381E0809311024C |
:10455000E091DF04FF27EE0FFF1FED54FB4F1182A8 |
:104560001082E091E004FF27EE0FFF1FED54FB4F98 |
:1045700011821082E091E204FF27EE0FFF1FED543D |
:10458000FB4F11821082CEC110922202CBC18091CA |
:104590001B028D3808F4C6C1109211028091F904F3 |
:1045A00022E3829FC0011124909337028093360248 |
:1045B00069817A81693271056CF080913102909144 |
:1045C00032027FEF8F3F970781F10196909332027D |
:1045D000809331028091310290913202883C9105A2 |
:1045E00020F089819A81889704F510924C021092EC |
:1045F0004D0210924E0210924F02109248021092F9 |
:10460000490210924A0210924B021092FF0110923E |
:104610000002109201021092020210920302109204 |
:1046200004021092050210920602E981FA81E93C27 |
:10463000F1050CF4D6C080912202882309F072C1E2 |
:10464000E091E204FF27EE0FFF1FED54FB4F808146 |
:1046500091818C3491050CF4C1C0809135028F5F3B |
:1046600080933502893C08F45DC129980E9410218D |
:1046700010922202109235021092320210923102F0 |
:104680008091DF04282F3327F901EE0FFF1FED542F |
:10469000FB4F80819181873491059CF4E091E00487 |
:1046A000FF27EE0FFF1FED54FB4F0190F081E02D2F |
:1046B000F7FF03C0F095E195FF4FE734F1050CF4E7 |
:1046C0006CC08091E004682F7727DB01AA0FBB1F25 |
:1046D000AD54BB4F8D919C911197873491053CF05F |
:1046E000F901EE0FFF1FED54FB4F808191818D91F9 |
:1046F0009C918734910564F0F901EE0FFF1FED5492 |
:10470000FB4F808191818734910514F042E001C014 |
:1047100041E0FB01EE0FFF1FED54FB4F80819181C3 |
:10472000863491055CF4F901EE0FFF1FED54FB4F49 |
:1047300080819181873491050CF043E0FB01EE0FFD |
:10474000FF1FED54FB4F808191818A5B9F4F5CF48A |
:10475000F901EE0FFF1FED54FB4F808191818734EB |
:1047600091050CF044E0660F771F6D547B4FFB0101 |
:10477000808191818A5B9F4F5CF4220F331F2D54FF |
:104780003B4FF90180819181863491050CF445E01D |
:10479000A2E0B0E0042E0E941B2F0E94B1034AE366 |
:1047A0006FED74E00E94D2030E94B1030E94462282 |
:1047B0008091E70480FFB6C080910C0190910D01BB |
:1047C000875B934040F480910C0190910D018E5EC7 |
:1047D000924008F0A7C00E943610A4C01092350283 |
:1047E000A1C049815A81433251050CF09BC0809190 |
:1047F000E204482F5527FA01EE0FFF1FED54FB4F3F |
:1048000080819181855B9F4F0CF06DC08091340257 |
:104810008F5F80933402893C08F467C088EC8093F2 |
:10482000340281E090E0909332028093310281E083 |
:104830008093220210924402109245021092460286 |
:10484000109247021092FF01109200021092010292 |
:1048500010920202109203021092040210920502BA |
:10486000109206021092EF011092F0011092F101E5 |
:104870001092F2011092F7011092F8011092F901D2 |
:104880001092FA018091DB019091DC01A091DD0191 |
:10489000B091DE018093F3019093F401A093F501B0 |
:1048A000B093F6018091E3019091E401A091E501BC |
:1048B000B091E6018093FB019093FC01A093FD0170 |
:1048C000B093FE0110924C0210924D0210924E02D3 |
:1048D00010924F02109248021092490210924A021E |
:1048E00010924B0202C010923402440F551F4D54D7 |
:1048F0005B4FFA01808191818C3491058CF080911D |
:1049000033028F5F80933302893C60F01092220261 |
:1049100088EC80933302109232021092310202C06E |
:1049200010923302809169018150809369018091D6 |
:1049300069018F3F29F080911102882309F412C187 |
:104940000E949E1DE091DF04FF27EE0FFF1FDF0195 |
:10495000AD54BB4F8D919C916091EE047727E75346 |
:10496000FB4F208131814091EF045527FC01E69FE8 |
:10497000C001E79F900DF69F900D1124F901E49F6F |
:104980009001E59F300DF49F300D1124820F931F8D |
:1049900090931D0280931C02E091E004FF27EE0F2C |
:1049A000FF1FDF01AD54BB4F8D919C91E753FB4F2F |
:1049B00020813181FC01E69FC001E79F900DF69FA9 |
:1049C000900D1124B901649F9001659F300D749F73 |
:1049D000300D1124820F931F90931F0280931E02AB |
:1049E000E091E204FF27EE0FFF1FED54FB4F8081A3 |
:1049F0009181909581959F4F909321028093200201 |
:104A000010918701612F772767FD7095872F972F6A |
:104A10000E948C2D17FF06C020E030E040E853E4F0 |
:104A20000E94E72C20E030E040E251E40E94E72CB5 |
:104A300020E030E040E85BE30E94062E5B016C0161 |
:104A4000609331057093320580933305909334055C |
:104A500010918801612F772767FD7095872F972F19 |
:104A60000E948C2D17FF06C020E030E040E853E4A0 |
:104A70000E94E72C20E030EE4BE257E40E94292D03 |
:104A80006093200570932105809322059093230560 |
:104A90008091E70482FF0CC080E090E0A0E0B0E0ED |
:104AA0008093200590932105A0932205B0932305C0 |
:104AB00020E030E040E050E0C601B5010E94962DB4 |
:104AC000882364F480E090E0A0E0B0E080933105BA |
:104AD00090933205A0933305B093340520E030E085 |
:104AE00040E050E060912005709121058091220501 |
:104AF000909123050E94962D882364F480E090E035 |
:104B0000A0E0B0E08093200590932105A0932205BA |
:104B1000B093230580911102882321F11092210284 |
:104B20001092200210921D0210921C0210921F027D |
:104B300010921E028DEC9CECACECBDE38093310531 |
:104B400090933205A0933305B09334058AE097ED36 |
:104B5000A3EABBE38093200590932105A09322054F |
:104B6000B09323058091C1019091C2018D54914071 |
:104B700008F490C02091DF013091E0014091E10103 |
:104B80005091E2018091DB019091DC01A091DD0167 |
:104B9000B091DE01B901681B790B70933B02609301 |
:104BA0003A022091E7013091E8014091E9015091EA |
:104BB000EA018091E3019091E401A091E501B091B7 |
:104BC000E601281B390B30933902209338021092EA |
:104BD000C2011092C101673A710534F08091D3018E |
:104BE0009091D401019608C06A557F4F4CF4809192 |
:104BF000D3019091D40101979093D4018093D30174 |
:104C0000273A310534F08091D5019091D601019673 |
:104C100008C02A553F4F4CF48091D5019091D601A0 |
:104C200001979093D6018093D50110927A008091DC |
:104C3000DB019091DC01A091DD01B091DE01809358 |
:104C4000F3019093F401A093F501B093F6018091E4 |
:104C5000E3019091E401A091E501B091E601809318 |
:104C6000FB019093FC01A093FD01B093FE018091A4 |
:104C7000EB019091EC01A091ED01B091EE018093D8 |
:104C8000030290930402A0930502B09306028FECF6 |
:104C900080937A006091DB017091DC018091DD01ED |
:104CA0009091DE012091F304622E772488249924C8 |
:104CB000E0902C05F0902D05A40193010E94B62EE2 |
:104CC0000027F7FC0095102F2E193F09400B510BC0 |
:104CD000CA01B90120E130E040E050E00E94B62E68 |
:104CE00059016A01209340023093410240934202ED |
:104CF000509343026091E3017091E4018091E501DA |
:104D00009091E601E0903505F0903605A4019301FD |
:104D10000E94B62E0027F7FC0095102F2E193F0990 |
:104D2000400B510BCA01B90120E130E040E050E0F6 |
:104D30000E94B62E20933C0230933D0240933E02E7 |
:104D400050933F02E5EFAE16E1E0BE06E0E0CE068E |
:104D5000E0E0DE062CF084EF91E0A0E0B0E00DC0D2 |
:104D6000FCE0AF16FEEFBF06FFEFCF06FFEFDF065A |
:104D700064F48CE09EEFAFEFBFEF8093400290931E |
:104D80004102A0934202B0934302253F61E03607FF |
:104D900060E0460760E056072CF084EF91E0A0E069 |
:104DA000B0E009C02C503E4F4F4F5F4F64F48CE091 |
:104DB0009EEFAFEFBFEF80933C0290933D02A09334 |
:104DC0003E02B0933F0210927A008091EF019091E1 |
:104DD000F001A091F101B091F201209140023091D7 |
:104DE00041024091420250914302821B930BA40B5B |
:104DF000B50B8093EF019093F001A093F101B09374 |
:104E0000F2018091F7019091F801A091F901B09120 |
:104E1000FA0120913C0230913D0240913E025091B6 |
:104E20003F02821B930BA40BB50B8093F701909369 |
:104E3000F801A093F901B093FA01809120029091BA |
:104E400021029C01442737FD4095542F2B833C833E |
:104E50004D835E8320934402309345024093460283 |
:104E60005093470297FF03C0909581959F4F849779 |
:104E70003CF08091E70484FD03C081E080932D0223 |
:104E8000A090FF01B0900002C0900102D0900202F9 |
:104E90008B819C8197FF03C0909581959F4F7C01EA |
:104EA0000027F7FC0095102F2091F00433274427AA |
:104EB00055276B817C818D819E810E944E2E9B01A6 |
:104EC000AC01C801B7010E944E2E20E031E040E065 |
:104ED00050E00E94B62E442737FD4095542FA21A69 |
:104EE000B30AC40AD50AA092FF01B0920002C09290 |
:104EF0000102D09202028091FF0190910002A091E4 |
:104F00000102B091020281539547A040B04064F085 |
:104F100080E395E7A0E0B0E08093FF01909300026A |
:104F2000A0930102B09302028091FF0190910002D0 |
:104F3000A0910102B0910202805D9A48AF4FBF4F2D |
:104F400064F480ED9AE8AFEFBFEF8093FF01909398 |
:104F50000002A0930102B09302028FEC80937A00CA |
:104F60008091E704E82FFF27F887EF83E3FF9DC0D8 |
:104F70006091DB017091DC018091DD019091DE0197 |
:104F800020E034E040E050E00E94B62E890137FF77 |
:104F900003C0109501951F4F6091E3017091E401EA |
:104FA0008091E5019091E60120E034E040E050E09E |
:104FB0000E94B62EB90137FF03C0709561957F4FEF |
:104FC000601771070CF4B80163327105A4F4809185 |
:104FD0002D02882381F080912B0290912C02892B45 |
:104FE00051F480910B0290910C0290930E028093E9 |
:104FF0000D0210922D02209186013327629FC0017D |
:10500000639F900D729F900D112460E470E00E94E8 |
:10501000812EA901461B570B141615060CF03FC034 |
:1050200010927A0020912B0230912C02211531052B |
:1050300061F50091FF011091000220910102309171 |
:10504000020280910F0290911002BC01649FC00186 |
:10505000659F900D749F900D112460E270E00E9496 |
:10506000812E882777FD8095982F060F171F281F00 |
:10507000391F0093FF011093000220930102309327 |
:1050800002028FEC80937A0010C08FEC80937A003C |
:105090002150304030932C0220932B0206C084EF25 |
:1050A00091E090932C0280932B02809160048F5F9B |
:1050B0008093600480912E02815080932E028F3F56 |
:1050C00009F063C081E380932E026091DB0170914F |
:1050D000DC018091DD019091DE01A40193010E9429 |
:1050E000B62E30936204209361046091E3017091C5 |
:1050F000E4018091E5019091E601A40193010E94F1 |
:10510000B62E309364042093630480912C05909113 |
:105110002D059093660480936504809135059091E8 |
:105120003605909368048093670480912F059091D1 |
:10513000300590936A0480936904809123029091D2 |
:10514000240290936C0480936B0460910702709129 |
:1051500008028091090290910A0220E032E040E0CA |
:1051600050E00E94B62E30936E0420936D04898126 |
:105170009A819093700480936F0480910B029091B8 |
:105180000C0290937204809371046091DB01709122 |
:10519000DC018091DD019091DE01209020053090AE |
:1051A00021054090220550902305E0901B05F090CA |
:1051B0001C05609031057090320580903305909009 |
:1051C00034050E948C2DA20191010E94062E5B01E4 |
:1051D0006C010027F7FC0095102FC801B7010E9451 |
:1051E0008C2DA40193010E94062E9B01AC01C601E7 |
:1051F000B5010E94E72C0E946F2D70931C056093EF |
:105200001B056091E3017091E4018091E5019091AB |
:10521000E601E0901905F0901A050E948C2DA2017C |
:1052200091010E94062E5B016C010027F7FC00959E |
:10523000102FC801B7010E948C2DA40193010E9478 |
:10524000062E9B01AC01C601B5010E94E72C0E940D |
:105250006F2D70931A056093190560912F05709159 |
:105260003005A090EB01B090EC01C090ED01D09022 |
:10527000EE01882777FD8095982F0E948C2D7B0169 |
:105280008C0120E030E040E05FE3C401B3010E9404 |
:10529000062E9B01AC01C801B7010E94062E7B01BE |
:1052A0008C01C601B5010E948C2DA20191010E94C2 |
:1052B000062E9B01AC01C801B7010E94E72C0E9499 |
:1052C0006F2D7093300560932F0580911B05909191 |
:1052D0001C058150984034F080E098E090931C05C4 |
:1052E00080931B0580911B0590911C058050984F61 |
:1052F00034F480E098EF90931C0580931B05809117 |
:10530000190590911A058150984034F080E098E09A |
:1053100090931A05809319058091190590911A05AB |
:105320008050984F34F480E098EF90931A05809362 |
:10533000190580912F05909130058150984034F0E7 |
:1053400080E098E09093300580932F0580912F05A1 |
:10535000909130058050984F34F480E098EF90930E |
:10536000300580932F056F8160FFCDC09091830140 |
:1053700061FF0EC09233B0F4809123029091240219 |
:1053800044979093260280932502109212020DC03A |
:105390008091EC04989FC0011124449790932602B9 |
:1053A0008093250281E0809312028091110288236C |
:1053B00021F01092260210922502209123023091B2 |
:1053C00024024091250250912602421753070CF007 |
:1053D0009AC080911202882309F495C0241B350BD2 |
:1053E000809184019927FC012E9FC0012F9F900D71 |
:1053F0003E9F900D112460E170E00E94812E098192 |
:105400001A81061B170B2091BF013091C0018091BA |
:1054100082019927AC01249FC001259F900D349FE4 |
:10542000900D112468E070E00E94812E061B170B7E |
:1054300060910702709108028091090290910A021E |
:1054400020E032E040E050E00E94B62ECA01B901EF |
:10545000209185013327442755270E944E2E20E2B4 |
:1054600030E040E050E00E94B62E5FEF2E3C350762 |
:1054700014F42EEC3FEF80912F0290913002AC019A |
:1054800064E0440F551F6A95E1F7481B590B23331D |
:10549000310514F022E330E0021B130BCA01800F28 |
:1054A000911F60E170E00E94812E70933002609342 |
:1054B0002F028091E8049927681779078CF4698195 |
:1054C0007A81681779072CF09093300280932F022D |
:1054D00007C089819A819093300280932F020DC07A |
:1054E00080912F0290913002E981FA81E817F90743 |
:1054F00024F4F0933002E0932F0220912F02309198 |
:1055000030023A832983C0902F05D09030054B811B |
:105510005C81C41AD50A55E6C516D10424F014E6F8 |
:10552000C12ED12C09C06CE9C6166FEFD60624F443 |
:10553000BCE9CB2EBFEFDB2E40907A0150907B016F |
:1055400060907C0170907D0160911B0570911C053D |
:1055500020911C0230911D02409150025091510245 |
:10556000241B350B621B730B882777FD8095982FC2 |
:105570000E948C2D9B01AC01C301B2010E94062E3A |
:105580000E946F2D70936902609368028091680297 |
:10559000909169028C01222717FD2095322F80916E |
:1055A0004C0290914D02A0914E02B0914F02080F13 |
:1055B000191F2A1F3B1F00934C0210934D0220938A |
:1055C0004E0230934F021016110612061306ACF469 |
:1055D000C80117FF03C0909581959F4F60E071E06F |
:1055E0000E94812E6F5F7F4F882777FD8095982FCF |
:1055F000061B170B280B390B14C0C80117FF03C07B |
:10560000909581959F4F60E071E00E94812E6F5FC1 |
:105610007F4F882777FD8095982F060F171F281F2B |
:10562000391F00934C0210934D0220934E02309389 |
:105630004F0280914C0290914D02A0914E02B09188 |
:105640004F0281387EE3970770E0A70770E0B70745 |
:105650002CF080E89EE3A0E0B0E009C08058914CB7 |
:10566000AF4FBF4F64F480E891ECAFEFBFEF809392 |
:105670004C0290934D02A0934E02B0934F02609162 |
:1056800068027091690280907E0190907F01A090E5 |
:105690008001B0908101882777FD8095982F0E9426 |
:1056A0008C2D7B018C0160914C0270914D02809198 |
:1056B0004E0290914F020E948C2D9B01AC01C501BE |
:1056C000B4010E94062E9B01AC01C801B7010E94E3 |
:1056D000E72C0E946F2D9601260F371F49815A81B2 |
:1056E000240F351F22244A30510514F4A1E02A2E3C |
:1056F00037FD02C0222019F040E050E008C0809140 |
:105700002E05482F5527241735070CF4A901809141 |
:105710001D05E82FFF27F887EF839F01E417F507A2 |
:105720000CF49A012093660229813A81261B370BDB |
:10573000B9016C0D7D1D77FD02C0222019F080E0BB |
:1057400090E007C080912E059927681779070CF41F |
:10575000CB012F813885281739070CF49C01209341 |
:1057600067026091190570911A0520911E0230910F |
:105770001F024091520250915302241B350B621BB1 |
:10578000730B882777FD8095982F0E948C2D9B01A5 |
:10579000AC01C301B2010E94062E0E946F2D7093CE |
:1057A00065026093640280916402909165028C01AD |
:1057B000222717FD2095322F8091480290914902AF |
:1057C000A0914A02B0914B02080F191F2A1F3B1FDC |
:1057D000009348021093490220934A0230934B02EF |
:1057E0001016110612061306ACF4C80117FF03C009 |
:1057F000909581959F4F60E071E00E94812E6F5FD0 |
:105800007F4F882777FD8095982F061B170B280B55 |
:10581000390B14C0C80117FF03C0909581959F4FA5 |
:1058200060E071E00E94812E6F5F7F4F882777FDD7 |
:105830008095982F060F171F281F391F00934802C5 |
:105840001093490220934A0230934B028091480200 |
:1058500090914902A0914A02B0914B0281383EE3F7 |
:10586000930730E0A30730E0B3072CF080E89EE315 |
:10587000A0E0B0E009C08058914CAF4FBF4F64F436 |
:1058800080E891ECAFEFBFEF80934802909349021C |
:10589000A0934A02B0934B0260916402709165023A |
:1058A000882777FD8095982F0E948C2D7B018C0195 |
:1058B000609148027091490280914A0290914B0296 |
:1058C0000E948C2D9B01AC01C501B4010E94062EE3 |
:1058D0009B01AC01C801B7010E94E72C0E946F2D0B |
:1058E00029813A81260F371F2C193D0937FD02C047 |
:1058F000222019F040E050E008C080912E05482F8A |
:105900005527241735070CF4A9012F813885241752 |
:1059100035070CF49A0120936C0289819A81861BC9 |
:10592000970BBC016C197D0977FD02C0222019F08C |
:1059300020E030E008C080912E05282F3327621721 |
:1059400073070CF49B018F819885821793070CF4E1 |
:10595000C90180936A02E2E1C85F0C94ED2E809148 |
:10596000540290915502A0915602B0915702809333 |
:105970005C0290935D02A0935E02B0935F028091FF |
:10598000580290915902A0915A02B0915B02809303 |
:10599000600290936102A0936202B0936302089543 |
:1059A0001092510210925002109253021092520221 |
:1059B0000895FC014150504030F001900616D1F797 |
:1059C0003197CF0108958827992708955058192EA7 |
:1059D000EFD001D0D2C0BA176207730784079507CA |
:1059E000B1F188F40EF410940B2EBA2FA02D062ED0 |
:1059F000622F202D072E732F302D082E842F402D3F |
:105A0000092E952F502DFF275523B9F0591B49F02A |
:105A1000573E98F0469537952795A795F0405395B2 |
:105A2000C9F776F0BA0F621F731F841F30F4879591 |
:105A300077956795B795F040939517FA0F2E0895CF |
:105A4000BF1BBB27BA0B620B730B840BF6CFDEF6C2 |
:105A5000DBC0AED001D091C0552359F0992369F035 |
:105A60009F575F57951B33F442F4903811F49158C7 |
:105A700005C09BC091589F3F09F4C6C0BB271124A5 |
:105A800062177307840730F4660F771F881FBB1FE8 |
:105A9000915098F311D00F920FD00F920DD0A0E833 |
:105AA0002617370748071B0609F0A048BA2F602DB4 |
:105AB0007F918F9100240895A0E800246217730756 |
:105AC0008407B10528F0621B730B840BB1090A2A05 |
:105AD000660F771F881FBB1FA69581F7089597FB58 |
:105AE00073D09F3738F0FEE9F91B982F872F762F58 |
:105AF0006B2F05C086C09695879577956795F15071 |
:105B0000D0F73EF490958095709561957F4F8F4FBB |
:105B10009F4F0895E89403C097FB0EF4F3DFB62F70 |
:105B2000672F782F892F9EE9002427C00ED05EF0C2 |
:105B300004C00BD026F001C008D019F020F48FEF7C |
:105B4000089580E0089581E0089597FB092E0526C9 |
:105B500000F8689430D0E89407FC07C06217730718 |
:105B60008407950721F008F4009407949894089509 |
:105B70009A95BB0F661F771F881F11249923A1F0E8 |
:105B80008823B2F79F3F59F0BB0F48F421F400205F |
:105B900011F460FF04C06F5F7F4F8F4F9F4F881FCE |
:105BA0009795879597F908952CC09FEF80EC0895FD |
:105BB000052E092607FA440F551F5F3F79F0AA27E3 |
:105BC000A51708F051E04795880F991F9F3F31F0C6 |
:1019700011F50E94C01490930C0280930B02809189 |
:101980000B0290910C0220910D0230910E02821BED |
:10199000930B845E9D4F68E671E00E94722E845B1B |
:1019A00090409093100280930F0284ED93E0909307 |
:1019B000030180930201FF91EF91BF91AF919F913D |
:1019C0008F917F916F915F914F913F912F910F90E8 |
:1019D0000FBE0F901F9018958091A3019091A401C4 |
:1019E0000B969093AC018093AB0182E085BD83EAB6 |
:1019F00084BD17BC88E788BD83EC8093B00086E087 |
:101A00008093B100E0E7F0E0808182608083EEE6C1 |
:101A1000F0E08081816080838AE08093B30010923F |
:101A2000B20008952091A3013091A4012F5F3F4F90 |
:101A3000280F391F8091A3019091A401A901481B8F |
:101A4000590B57FFF7CF089510927C008FEC8093CD |
:101A50007A0008951F920F920FB60F921124EF9201 |
:101A6000FF920F931F932F933F934F935F936F9327 |
:101A70007F938F939F93AF93BF93CF93DF93EF9316 |
:101A8000FF9310927A008091C3018F5F8093C3010E |
:101A90008150E82FFF27E830F10508F0B6C2E45B7B |
:101AA000FF4F0C94F92E2091D7013091D8018091ED |
:101AB000780090917900281B390B8091B1019091A9 |
:101AC000B201820F931F9093B2018093B101809174 |
:101AD000BB018F5F8093BB018091FF019091000259 |
:101AE000A0910102B0910202442737FD4095542F86 |
:101AF000820F931FA41FB51F8093FF0190930002D4 |
:101B0000A0930102B093020280910302909104021B |
:101B1000A0910502B0910602820F931FA41FB51F6A |
:101B20008093030290930402A0930502B0930602EF |
:101B300081E08093C4018091C1019091C20101961E |
:101B40009093C2018093C10164C26091780070914A |
:101B500079008091D5019091D601681B790B809115 |
:101B6000F7019091F801A091F901B091FA019B0160 |
:101B7000442737FD4095542F820F931FA41FB51F94 |
:101B80008093F7019093F801A093F901B093FA01C3 |
:101B90008091FB019091FC01A091FD01B091FE01AB |
:101BA000820F931FA41FB51F8093FB019093FC012C |
:101BB000A093FD01B093FE0180917800909179008F |
:101BC0000A9710F464E47DEF809178009091790099 |
:101BD000895E934010F06CEB72E08091AF019091C0 |
:101BE000B001860F971F9093B0018093AF01809151 |
:101BF000BA018F5F8093BA0182E058C0609178008B |
:101C0000709179008091D3019091D401681B790B78 |
:101C10008091EF019091F001A091F101B091F2015A |
:101C20009B01442737FD4095542F820F931FA41F1B |
:101C3000B51F8093EF019093F001A093F101B09351 |
:101C4000F2018091F3019091F401A091F501B0911E |
:101C5000F601820F931FA41FB51F8093F301909389 |
:101C6000F401A093F501B093F60180917800909172 |
:101C700079000A9710F464E47DEF809178009091E8 |
:101C80007900895E934010F06CEB72E08091AD01B9 |
:101C90009091AE01860F971F9093AE018093AD0196 |
:101CA0008091B9018F5F8093B90184E08093C40172 |
:101CB000B0C1409106015091070180917800909148 |
:101CC00079009A01220F331F240F351F63E070E063 |
:101CD0000E945E2E260F371F36952795369527953D |
:101CE000309307012093060186E0E0CF2091780031 |
:101CF000309179008091260590912705821B930BE6 |
:101D000090938304809382048091B3019091B401F5 |
:101D10002091820430918304820F931F9093B40129 |
:101D20008093B3018091BD018F5F8093BD0187E0F7 |
:101D3000BDCF809178009091790020912405309159 |
:101D40002505821B930B90938E0480938D048091C4 |
:101D5000B5019091B60120918D0430918E04820FCF |
:101D6000931F9093B6018093B5018091BC018F5F62 |
:101D70008093BC0185E08093C40186E0CBC0609174 |
:101D8000780070917900E0902805F0902905009185 |
:101D90002A0510912B05882777FD8095982F0E94A2 |
:101DA0007D2DA80197010E94D72C0E94602D709371 |
:101DB000B8016093B7012091B7013091B801E0916B |
:101DC0008204F091830480918D0490918E0497FF9A |
:101DD00003C0909581959F4F64E070E00E94722E41 |
:101DE000EB01CF01F7FF03C0909581959F4F64E011 |
:101DF00070E00E94722E260F371F2C0F3D1F30936C |
:101E0000B8012093B7018091B7019091B801029772 |
:101E10009CF020E030E048E454E4C801B7010E949F |
:101E2000872D882354F52AE037ED43EA5CE3C801A7 |
:101E3000B7010E94D82C19C08091B7019091B801C8 |
:101E40008F5F9F4FD4F420E030E046E154E4C801B6 |
:101E5000B7010E948A2D181684F42AE037ED43EA70 |
:101E60005CE3C801B7010E94D72C609328057093EA |
:101E7000290580932A0590932B0581E08093BE016C |
:101E800080917800909179009093850480938404E8 |
:101E900020910702309108024091090250910A02F4 |
:101EA0008091B7019091B801AA2797FDA095BA2F0C |
:101EB000280F391F4A1F5B1F209307023093080227 |
:101EC0004093090250930A02E0900702F090080242 |
:101ED0000091090210910A026091070270910802B4 |
:101EE0008091090290910A0220E034E040E050E045 |
:101EF0000E94A72EE21AF30A040B150BE0920702C8 |
:101F0000F09208020093090210930A0283E0809382 |
:101F1000C40187E08093C3017CC0809192049091BA |
:101F200093042091780030917900820F931F909351 |
:101F300093048093920480918A048F5F80938A0433 |
:101F400080918A04853008F460C080917800909177 |
:101F5000790090930D0180930C0110928A04809176 |
:101F60008604909187042091920430919304821BFF |
:101F7000930B2091230230912402821B930B9093A8 |
:101F8000C0018093BF016091920470919304E0902E |
:101F90000801F090090100910A0110910B018827B6 |
:101FA00077FD8095982FA8019701220F331F441FBA |
:101FB000551F2E0D3F1D401F511F620F731F841FA1 |
:101FC000951F24E030E040E050E00E94A72E2093CF |
:101FD00008013093090140930A0150930B012091AD |
:101FE0008604309187048091080190910901A091A5 |
:101FF0000A01B0910B01281B390B30932402209366 |
:10200000230210929304109292041092C401109231 |
:10201000C3018091C40180937C008FEC80937A008F |
:10202000FF91EF91DF91CF91BF91AF919F918F91F0 |
:102030007F916F915F914F913F912F911F910F91E0 |
:10204000FF90EF900F900FBE0F901F901895CF93B9 |
:10205000DF93C0E0D0E0C7BD82E390E00E94120DA4 |
:102060008BEC91E09F938F931F920E9424098091A3 |
:102070000C0190910D010F900F900F908458934098 |
:1020800020F02196CA3FD10531F7C0938F0488EC28 |
:1020900090E00E94120DDF91CF910895E8E1F1E008 |
:1020A00080E2819391E0E836F907D9F70895FF922D |
:1020B0000F931F938091C801282F3327C901817086 |
:1020C0009070682F882391F08091C901882311F0C6 |
:1020D000815002C0809168018093C901E8E1F1E07C |
:1020E00080E2819391E0E836F907D9F7A9014270BF |
:1020F000507021FF0DC08091C9018F5F8093C9018D |
:10210000E8E1F1E080E2819391E0E836F907D9F760 |
:10211000662321F0452B11F01092C90181E18093D3 |
:10212000C7018091C90199279F938F9385EA94E015 |
:102130009F938F9381E08F930E9424098091C9011E |
:102140000F900F900F900F900F90E82FFF27ED301A |
:10215000F10508F0BCC3EC5AFF4F0C94F92E109215 |
:10216000C70183E994E09F938F9311E01F930E942E |
:10217000240984E18093C7018CE390E09F938F93BF |
:102180001F921F928CE894E09F938F931F930E945D |
:10219000240988E28093C7010E94B10399279F9385 |
:1021A0008F938FE794E09F938F931F930E9424094E |
:1021B0008CE38093C7018FE694E09F938F931F93E6 |
:1021C0000E94240980C38091E70480FF44C01092DC |
:1021D000C70180912302909124029F938F9380E600 |
:1021E00094E09F938F9311E01F930E94240984E150 |
:1021F0008093C70180912502909126029F938F932F |
:1022000081E594E09F938F931F930E94240988E2B5 |
:102210008093C70180910C0190910D019F938F9342 |
:1022200082E494E09F938F931F930E9424098CE390 |
:102230008093C70180918F0499279F938F9383E3A5 |
:1022400094E09F938F931F930E9424098DB79EB7AC |
:1022500044968DBF41C384E18093C7018CE294E032 |
:102260009F938F9311E01F930E94240988E280932B |
:10227000C7018EE194E09F938F931F930E942409DE |
:102280008DB79EB70696E5CF1092C70184E194E022 |
:102290009F938F9311E01F930E94240984E1809300 |
:1022A000C7016091DB017091DC018091DD019091AB |
:1022B000DE0120E034E040E050E00E94A72E5F9372 |
:1022C0004F933F932F9385E094E09F938F931F93B9 |
:1022D0000E94240988E28093C7016091E301709114 |
:1022E000E4018091E5019091E60120E034E040E0D6 |
:1022F00050E00E94A72E5F934F933F932F9386EF5A |
:1023000093E09F938F931F930E9424098CE3809303 |
:10231000C70180910B0290910C029F938F9387EEDF |
:1023200093E09F938F931F930E9424098DB79EB7CC |
:1023300046968FCF1092C7018091B7049091B80450 |
:102340002091B5043091B6049F938F933F932F93C0 |
:1023500087ED93E09F938F9311E01F930E942409D0 |
:1023600084E18093C7018091BB049091BC042091CB |
:10237000B9043091BA049F938F933F932F9387ECC6 |
:1023800093E09F938F931F930E94240988E2809388 |
:10239000C7018091BF049091C0042091BD04309189 |
:1023A000BE049F938F933F932F9387EB93E09F936C |
:1023B0008F931F930E9424098CE38093C70180911F |
:1023C000C1049091C2049F938F9387EA93E070C0F9 |
:1023D0001092C701E091E004FF27EE0FFF1FED54BC |
:1023E000FB4F20813181E091DF04FF27EE0FFF1FBB |
:1023F000ED54FB4F808191813F932F939F938F9357 |
:1024000087E993E09F938F9311E01F930E94240923 |
:1024100084E18093C701E091E204FF27EE0FFF1FE4 |
:10242000ED54FB4F20813181E091E104FF27EE0F55 |
:10243000FF1FED54FB4F808191813F932F939F931A |
:102440008F9387E893E09F938F931F930E942409B3 |
:1024500088E28093C701E091E404FF27EE0FFF1F9D |
:10246000ED54FB4F20813181E091E304FF27EE0F13 |
:10247000FF1FED54FB4F808191813F932F939F93DA |
:102480008F9387E793E09F938F931F930E94240974 |
:102490008CE38093C701E091E504FF27EE0FFF1F57 |
:1024A000ED54FB4F808191819F938F9387E693E05A |
:1024B0009F938F931F930E9424098DB79EB74A96CE |
:1024C000C8CE1092C70189E593E09F938F9311E0E6 |
:1024D0001F930E94240984E18093C7012091D301B6 |
:1024E0003091D4018091AD019091AE016091B9011C |
:1024F0003F932F9377270E94722E7F936F938AE4E6 |
:1025000093E09F938F931F930E94240988E2809306 |
:10251000C7012091D5013091D6018091AF019091F2 |
:10252000B0016091BA013F932F9377270E94722EDA |
:102530007F936F938BE393E09F938F931F930E94FE |
:1025400024098CE38093C7012091D7013091D801F1 |
:102550008091B1019091B2016091BB013F932F93A3 |
:1025600077270E94722E7F936F938CE293E09F9364 |
:102570008F931F935BC01092C7018FE193E09F93ED |
:102580008F9381E0F82EFF920E94240984E18093CA |
:10259000C7018091B5019091B6016091BC01209175 |
:1025A0002405309125053F932F9377270E94722EA3 |
:1025B0007F936F9380E193E09F938F93FF920E94AC |
:1025C000240988E28093C7018091B3019091B401FE |
:1025D0006091BD0120912605309127053F932F93EF |
:1025E00077270E94722E7F936F9381E093E09F93F1 |
:1025F0008F93FF920E9424098CE38093C70100917E |
:1026000084041091850460912805709129058091BA |
:102610002A0590912B050E94602D7F936F931F9345 |
:102620000F9382EF92E09F938F93FF920E94240971 |
:102630008DB79EB748960DCE84E18093C7018091F7 |
:102640000601909107019F938F9383EE92E09F93F1 |
:102650008F9311E01F930E94240988E28093C701A1 |
:1026600080911B0299279F938F9384ED92E09F9313 |
:102670008F931F930E9424098DB79EB70A96E9CDC8 |
:102680001092C70185EC92E09F938F9311E01F9306 |
:102690000E94240984E18093C70180910F029091E8 |
:1026A00010029F938F9386EB92E09F938F931F93DB |
:1026B0000E94240988E28093C70180910B029091C7 |
:1026C0000C029F938F9387EA92E09F938F931F93BF |
:1026D0000E9424098CE38093C70180910D029091A0 |
:1026E0000E029F938F9388E992E0E8C01092C70191 |
:1026F00080911302909114029F938F938CE892E043 |
:102700009F938F9311E01F930E94240984E180938B |
:10271000C70180911502909116029F938F9380E8D4 |
:1027200092E09F938F931F930E94240988E28093E5 |
:10273000C70180911702909118029F938F9384E7AD |
:1027400092E09F938F931F930E9424098CE38093C0 |
:10275000C7018091190290911A029F938F9388E686 |
:1027600092E06FCD1092C70180E692E09F938F9325 |
:1027700011E01F930E94240984E18093C701809196 |
:102780008B0199279F938F9382E592E09F938F937C |
:102790001F930E94240988E28093C7018091A801B9 |
:1027A0009091A9019F938F9384E492E09F938F93DC |
:1027B0001F930E9424098CE38093C7018091030535 |
:1027C00099279F938F938091020599279F938F93C9 |
:1027D00086E392E09F938F931F930E94240936CD46 |
:1027E0001092C7018EE292E09F938F9311E01F93A6 |
:1027F0000E94240984E18093C70180919404992761 |
:1028000087FD90959F938F938FE192E09F938F9395 |
:102810001F930E94240988E28093C7018091950448 |
:10282000992787FD90959F938F9380E192E09F93E6 |
:102830008F931F930E9424098CE38093C70180919A |
:102840009604992787FD90959F938F9381E092E05E |
:1028500035C01092C70187EF91E09F938F9311E0ED |
:102860001F930E94240984E18093C70180919704FB |
:10287000909198049F938F9389EE91E09F938F930B |
:102880001F930E94240988E28093C70180919904D4 |
:1028900090919A049F938F938BED91E09F938F93E8 |
:1028A0001F930E9424098CE38093C70180919B04AD |
:1028B00090919C049F938F938DEC91E09F938F93C5 |
:1028C0001F930E9424098DB79EB74296C2CC8150B7 |
:1028D000809368011092C9011092C8011F910F9155 |
:1028E000FF9008951F920F920FB60F9211242F930D |
:1028F0003F934F938F939F9380919D04833019F062 |
:102900008430A1F508C08EB58093CA011EBC84E056 |
:1029100080939D042BC08091CA019927382F2227CC |
:102920008EB59927282B392BC9018D509E4F875E74 |
:102930009340D0F48091A004853019F0863069F47A |
:1029400006C03093A2042093A10486E00BC030930C |
:10295000A4042093A30487E005C03093A604209329 |
:10296000A50485E08093A00410929D049F918F910F |
:102970004F913F912F910F900FBE0F901F90189580 |
:10298000A0E1B0E0E6ECF4E10C94C22E6091DB0132 |
:102990007091DC018091DD019091DE01E090FC04FA |
:1029A000FF2433E0EE0CFF1C3A95E1F700271127D6 |
:1029B000A80197010E94A72EDA01C9013093A8044B |
:1029C0002093A7040E94CC176D877E878F87988BF2 |
:1029D0008091A7049091A8040E942C1869877A8797 |
:1029E0008B879C876091E3017091E4018091E50100 |
:1029F0009091E601A80197010E94A72EDA01C90172 |
:102A00003093AA042093A9040E94CC176D837E837F |
:102A10008F8398878091A9049091AA040E942C1812 |
:102A200069837A838B839C8380919404992787FDA3 |
:102A30009095A090A104B090A204A81AB90A809120 |
:102A40009504992787FD90958090A3049090A40405 |
:102A5000881A990A80919604992787FD909540904D |
:102A6000A5045090A604481A590A20909704309063 |
:102A70009804C0909904D0909A04C214D304D0F45E |
:102A800060909B0470909C046214730498F471012C |
:102A900000271127B401882777FD8095982FA8017A |
:102AA00097010E943F2E9601442755270E94A72E8A |
:102AB00049011CC02C143D0448F560909B047090A3 |
:102AC0009C046C147D0410F5760100271127B501D4 |
:102AD000882777FD8095982FA80197010E943F2EA7 |
:102AE0009101442755270E94A72E5901B20188273A |
:102AF00077FD8095982FA80197010E943F2E9301A2 |
:102B0000442755270E94A72E290124C0E0909B044A |
:102B1000F0909C0400271127B501882777FD809548 |
:102B2000982FA80197010E943F2E91014427552715 |
:102B30000E94A72E5901B401882777FD8095982F10 |
:102B4000A80197010E943F2E9601442755270E9415 |
:102B5000A72E4901B0927404A09273049092760457 |
:102B6000809275045092780440927704B5018827CA |
:102B700077FD8095982F0E947D2D29853A854B857C |
:102B80005C850E94F72D5B016C01B401882777FDFD |
:102B90008095982F0E947D2D7B018C012D813E8197 |
:102BA0004F8158850E94F72D2D853E854F85588988 |
:102BB0000E94F72D9B01AC01C601B5010E94D82CE3 |
:102BC0003B014C01B201882777FD8095982F0E9428 |
:102BD0007D2D5B016C0129813A814B815C81C801AB |
:102BE000B7010E94F72D7B018C012D813E814F8121 |
:102BF0005885C601B5010E94F72D9B01AC01C801A3 |
:102C0000B7010E94D82C0E94602D7B018C01298184 |
:102C10003A814B815C81C601B5010E94F72D2D855B |
:102C20003E854F8558890E94F72D9B01AC01C40158 |
:102C3000B3010E94D72C0E94602DDC01CB01B701AB |
:102C40000E9424179C0197FF05C088279927821BA3 |
:102C5000930B04C088E691E0821B930BE2E1C05F16 |
:102C60000C94DE2E80919D04813041F0813018F06B |
:102C7000823059F51EC02A9A81E018C02A988091A6 |
:102C8000A004853011F481E307C0863011F482E39B |
:102C900003C0873011F483E38EBD85E090E00E948D |
:102CA0009D0B90939F0480939E0482E080939D04EB |
:102CB000089580919E0490919F040E94A60B882302 |
:102CC00021F01EBC83E080939D040895A0E0B0E055 |
:102CD000ECE6F6E10C94C42E299A2898EE24FF2401 |
:102CE000AA24BB24CC24DD246624772488249924B8 |
:102CF00062E3462E552400E010E08091A1049091FB |
:102D0000A2040817190714F48C0104C08E159F053E |
:102D10000CF47C018091A3049091A404C816D906F8 |
:102D200014F46C0104C08A159B050CF45C018091BD |
:102D3000A5049091A6048816990614F44C0104C0C9 |
:102D4000861597050CF43C01552081F485B191E07E |
:102D5000892785B985B192E0892785B982E390E01A |
:102D60009093A7018093A60152E3552E8AE090E04C |
:102D70000E949D0BEC01CE010E94A60B8823D9F383 |
:102D8000E091E104FF27EE0FFF1FED54FB4F808120 |
:102D90009181843691050CF44A94442011F05A94A0 |
:102DA000ACCFC8018E199F09909398048093970423 |
:102DB000C6018A199B0990939A0480939904C401CF |
:102DC0008619970990939C0480939B04E4E9F4E0AE |
:102DD000C8018E0D9F1D62E070E00E94722E60930C |
:102DE0009404C6018A0D9B1D62E070E00E94722E61 |
:102DF00060939504C401860D971D62E070E00E9407 |
:102E0000722E6093960489E0ACE2B1E0182E0E9425 |
:102E1000182FE0E1CDB7DEB70C94E02E82ED8CBD2B |
:102E200081E08DBD84B1846A84B95B9885E080932C |
:102E3000A00410929D0489E0E4E9F4E0ACE2B1E082 |
:102E4000182E0E94072F08951F93CF93DF93EC0154 |
:102E5000892B31F46115710519F480E090E08EC082 |
:102E600077FD02C011E001C01FEF209729F48AE529 |
:102E70001802C001112482C0882777FD8095982F01 |
:102E800022E330E040E050E00E943F2E9E014427C4 |
:102E900037FD4095542F0E94A72EF90137FF03C03C |
:102EA000F095E195FF4F41E0EE30F40734F4E6553C |
:102EB000FB4F8491282F332747C056E1E737F507AA |
:102EC0001CF02AE530E040C087E0E637F8071CF048 |
:102ED00029E530E039C044E0EE37F4071CF028E57E |
:102EE00030E032C053E0E433F5071CF027E530E072 |
:102EF0002BC082E0E038F8071CF026E530E024C063 |
:102F000042E0E830F4071CF025E530E01DC051E058 |
:102F1000E83BF5071CF024E530E016C081E0EC3713 |
:102F2000F8071CF023E530E00FC041E0EF34F40770 |
:102F30001CF022E530E008C0EB52F1401CF021E526 |
:102F400030E002C020E530E01C161D066CF4812F35 |
:102F5000992787FD9095AC01249FC001259F900D76 |
:102F6000349F900D11240AC011162CF484EB90E0CC |
:102F7000821B930B03C0C901845B9040DF91CF910A |
:102F80001F910895FC0125913491FC0132964591E1 |
:102F90005491CA01B9010895A0E0B0E0E2EDF7E173 |
:102FA0000C94CC2E9C0197FD04C041E0C42ED12C82 |
:102FB00006C0309521953F4F9FEFC92ED92E2B3556 |
:102FC00031055CF0C9018B5590408A35910540F47C |
:102FD00084EB90E0821B930B9C01C1E0D0E010C019 |
:102FE000C901855B90408A35910518F4245B304017 |
:102FF00005C088E691E0821B930B9C01CFEFDFEFC9 |
:10300000220F331F220F331FC90188549A4F0E9489 |
:10301000C2177B018C01B601882777FD8095982F18 |
:103020000E947D2D9B01AC01C801B7010E94F72DC4 |
:103030007B018C01BE01882777FD8095982F0E9427 |
:103040007D2D9B01AC01C801B7010E94F72DE8E07E |
:10305000CDB7DEB70C94E82E2AE530E0281B390BFB |
:10306000C9010E94CC1708951092B9008AE280939A |
:10307000B800089585EA8093BC0080E090E0089550 |
:1030800084E98093BC0008951092B9008093BB003E |
:1030900085E88093BC0080E090E008951F920F9235 |
:1030A0000FB60F9211248F939F93EF93FF9380910C |
:1030B000CB018F5F8093CB018150E82FFF27E83051 |
:1030C000F10508F074C0EF59FF4F0C94F92E809170 |
:1030D000CC01880F8E5A14C08091CC018F5F8093F1 |
:1030E000CC018150813009F444C0813038F0823005 |
:1030F00009F442C0833009F05AC041C08091660291 |
:103100001092B9008093BB0085E88093BC004FC04B |
:1031100084E98093BC008091CC01843018F4109233 |
:10312000CB0102C01092CC0185EAEFCF8091CD0196 |
:10313000880F8D5AE5CF8091CD018130D1F081305B |
:10314000E8F28230C9F0833091F519C08091BB005C |
:10315000E091CD01FF27E555FB4F80838091CD01A4 |
:10316000813039F0813050F2823031F08330F9F41F |
:1031700006C080916702C4CF80916A02C1CF80915E |
:103180006C02BECF8091CD019091BB00E82FFF274C |
:10319000E555FB4F94838F5F8093CD01843010F011 |
:1031A0001092CD0184E98093BC001092CB01FF9175 |
:1031B000EF919F918F910F900FBE0F901F901895D8 |
:1031C00083EC80938100EFE6F0E080818062808371 |
:1031D0001092D8011092D7011092D6011092D50109 |
:1031E0001092D4011092D30108951F920F920FB63E |
:1031F0000F9211240F931F932F933F934F935F933D |
:103200006F937F938F939F93AF93BF93CF93DF93EE |
:10321000EF93FF9320918600309187008091D00139 |
:103220009091D101281B390B8091860090918700E5 |
:103230009093D1018093D001C9018D5D9540835653 |
:10324000994148F481E090E09093CF018093CE01C2 |
:103250001092690154C0C091CE01D091CF01CA3003 |
:10326000D1050CF04CC0C9018B5F9040845B91404C |
:1032700008F040C0A901425D5140FE01EE0FFF1F62 |
:10328000ED54FB4F80819181FA01E81BF90BCF01CE |
:10329000F7FF03C0909581959F4F06974CF480915E |
:1032A0001B02883C28F480911B02865F80931B02DE |
:1032B000FE01EE0FFF1F8F010D541B4FD8012D9102 |
:1032C0003C91C901880F991F820F931F840F951F8E |
:1032D00064E070E00E94722ED8018D919C9111974C |
:1032E0009B01281B390BE753FB4F31832083119639 |
:1032F0007C936E932196D093CF01C093CE01FF9122 |
:10330000EF91DF91CF91BF91AF919F918F917F917D |
:103310006F915F914F913F912F911F910F910F905E |
:103320000FBE0F901F901895AF92BF92CF92DF9271 |
:10333000EF92FF920F931F9310927A008091B90140 |
:10334000882369F08091AD019091AE016091B9013F |
:1033500077270E94722E70931C0560931B05809145 |
:10336000BA01882369F08091AF019091B00160911A |
:10337000BA0177270E94722E70931A05609319057F |
:103380008091BB01882369F08091B1019091B201D5 |
:103390006091BB0177270E94722E70933005609375 |
:1033A0002F058091BC018823D9F1E0902C05F09085 |
:1033B0002D056091B5017091B6012091BC010027E7 |
:1033C000F7FC0095102F5701680183E0AA0CBB1C85 |
:1033D000CC1CDD1C8A95D1F7AE18BF08C00AD10AF3 |
:1033E000882777FD8095982FB4E0660F771F881F98 |
:1033F000991FBA95D1F73327442755270E94A72E46 |
:10340000A20EB31EC41ED51EC601B50128E030E0D1 |
:1034100040E050E00E94A72E30932D0520932C050C |
:103420008091BD018823D9F1E0903505F0903605F3 |
:103430006091B3017091B4012091BD010027F7FCA8 |
:103440000095102F57016801A3E0AA0CBB1CCC1CEF |
:10345000DD1CAA95D1F7AE18BF08C00AD10A88278B |
:1034600077FD8095982FF4E0660F771F881F991FCE |
:10347000FA95D1F73327442755270E94A72EA20E8D |
:10348000B31EC41ED51EC601B50128E030E040E0E1 |
:1034900050E00E94A72E3093360520933505809189 |
:1034A000BE018823A1F1E0901E05F0901F056091F8 |
:1034B000B7017091B8012091BE010027F7FC00957B |
:1034C000102F57016801E3E0AA0CBB1CCC1CDD1CCB |
:1034D000EA95D1F7AE18BF08C00AD10A882777FD50 |
:1034E0008095982F3327442755270E94A72EA20E98 |
:1034F000B31EC41ED51EC601B50128E030E040E071 |
:1035000050E00E94A72E30931F0520931E051092B5 |
:10351000AE011092AD011092B9011092B00110925B |
:10352000AF011092BA011092B2011092B101109243 |
:10353000BB011092B4011092B3011092BD01109220 |
:10354000B6011092B5011092BC011092B801109210 |
:10355000B7011092BE018091FF0190910002A091ED |
:103560000102B09102028093EB019093EC01A093D1 |
:10357000ED01B093EE018091EF019091F001A091E7 |
:10358000F101B091F2018093DB019093DC01A093F3 |
:10359000DD01B093DE018091F7019091F801A091D7 |
:1035A000F901B091FA018093E3019093E401A093B3 |
:1035B000E501B093E6018091F3019091F401A091AF |
:1035C000F501B091F6018093DF019093E001A093A3 |
:1035D000E101B093E2018091FB019091FC01A09187 |
:1035E000FD01B091FE018093E7019093E801A09363 |
:1035F000E901B093EA018FEC80937A0020911302E5 |
:10360000309114028091E304E82FFF27EE0FFF1F93 |
:10361000ED54FB4F8081918182599F4F28173907C4 |
:103620001CF42F5F3F4F0CC08081918182599F4FC6 |
:10363000821793074CF42115310531F021503040A9 |
:103640003093140220931302209115023091160238 |
:103650008091E404E82FFF27EE0FFF1FED54FB4F8E |
:103660008081918182599F4F281739071CF42F5F61 |
:103670003F4F0CC08081918182599F4F82179307E1 |
:103680004CF42115310531F02150304030931602B1 |
:103690002093150220911702309118028091E504C1 |
:1036A000E82FFF27EE0FFF1FED54FB4F8081918124 |
:1036B00082599F4F281739071CF42F5F3F4F0CC0CA |
:1036C0008081918182599F4F821793074CF4211575 |
:1036D000310531F021503040309318022093170209 |
:1036E0002091190230911A028091E604E82FFF27F9 |
:1036F000EE0FFF1FED54FB4F8081918182599F4F48 |
:10370000281739071CF42F5F3F4F0CC0808191812F |
:1037100082599F4F821793074CF42115310531F0E0 |
:103720002150304030931A022093190280911302E5 |
:103730009091140297FF05C0109214021092130288 |
:103740000AC08F3F910539F034F08FEF90E09093ED |
:10375000140280931302809115029091160297FF34 |
:1037600005C010921602109215020AC08F3F9105F3 |
:1037700039F034F08FEF90E09093160280931502A9 |
:10378000809117029091180297FF05C010921802BD |
:10379000109217020AC08F3F910539F034F08FEF75 |
:1037A00090E09093180280931702809119029091F3 |
:1037B0001A0297FF05C010921A02109219020AC04D |
:1037C0008F3F910539F034F08FEF90E090931A021B |
:1037D000809319021F910F91FF90EF90DF90CF908F |
:1037E000BF90AF90089510927A008091B90188231C |
:1037F00069F08091AD019091AE016091B901772798 |
:103800000E94722E70931C0560931B058091BA0173 |
:10381000882369F08091AF019091B0016091BA0165 |
:1038200077270E94722E70931A0560931905809174 |
:10383000BB01882369F08091B1019091B201609140 |
:10384000BB0177270E94722E7093300560932F057D |
:103850008091BC018823D1F06091B5017091B601CF |
:103860002091BC01882777FD8095982FF4E0660FA2 |
:10387000771F881F991FFA95D1F7332744275527BB |
:103880000E94A72E30932D0520932C058091BD0119 |
:103890008823D1F06091B3017091B4012091BD01F2 |
:1038A000882777FD8095982FE4E0660F771F881FA3 |
:1038B000991FEA95D1F73327442755270E94A72E51 |
:1038C00030933605209335058091BE01882399F009 |
:1038D0006091B7017091B8012091BE01882777FDF2 |
:1038E0008095982F3327442755270E94A72E309381 |
:1038F0001F0520931E051092AE011092AD0110928B |
:10390000B9011092B0011092AF011092BA01109259 |
:10391000B2011092B1011092BB011092B401109249 |
:10392000B3011092BD011092B6011092B501109230 |
:10393000BC011092B8011092B7011092BE018FEC39 |
:1039400080937A0020911302309114028091E30455 |
:10395000E82FFF27EE0FFF1FED54FB4F8081918171 |
:1039600082599F4F281739071CF42F5F3F4F0CC017 |
:103970008081918182599F4F821793074CF42115C2 |
:10398000310531F02150304030931402209313025E |
:1039900020911502309116028091E404E82FFF2750 |
:1039A000EE0FFF1FED54FB4F8081918182599F4F95 |
:1039B000281739071CF42F5F3F4F0CC0808191817D |
:1039C00082599F4F821793074CF42115310531F02E |
:1039D0002150304030931602209315022091170297 |
:1039E000309118028091E504E82FFF27EE0FFF1FAA |
:1039F000ED54FB4F8081918182599F4F28173907E1 |
:103A00001CF42F5F3F4F0CC08081918182599F4FE2 |
:103A1000821793074CF42115310531F021503040C5 |
:103A200030931802209317022091190230911A0244 |
:103A30008091E604E82FFF27EE0FFF1FED54FB4FA8 |
:103A40008081918182599F4F281739071CF42F5F7D |
:103A50003F4F0CC08081918182599F4F82179307FD |
:103A60004CF42115310531F02150304030931A02C9 |
:103A700020931902809113029091140297FF05C0C0 |
:103A800010921402109213020AC08F3F910539F070 |
:103A900034F08FEF90E090931402809313028091A2 |
:103AA00015029091160297FF05C01092160210920F |
:103AB00015020AC08F3F910539F034F08FEF90E086 |
:103AC000909316028093150280911702909118022C |
:103AD00097FF05C010921802109217020AC08F3F7C |
:103AE000910539F034F08FEF90E0909318028093B5 |
:103AF00017028091190290911A0297FF05C0109247 |
:103B00001A021092190208958F3F910539F034F08E |
:103B10008FEF90E090931A028093190208951F93FB |
:103B20008091EA048B3F98F08B3F19F48091130247 |
:103B30000EC08C3F19F48091150209C08D3F19F415 |
:103B40008091170204C08E3F21F480911902809366 |
:103B5000830180918301882319F41092830104C0AA |
:103B60008F3F11F4809383018091E9048B3F98F09B |
:103B70008B3F19F4809113020EC08C3F19F4809191 |
:103B8000150209C08D3F19F48091170204C08E3FC1 |
:103B900021F480911902809382018091820188230F |
:103BA00019F41092820105C0843618F084E68093DF |
:103BB00082018091EB048B3F98F08B3F19F4809148 |
:103BC00013020EC08C3F19F48091150209C08D3F7D |
:103BD00019F48091170204C08E3F21F480911902DC |
:103BE0008093840180918401882319F410928401C8 |
:103BF00005C0843618F084E6809384018091ED043A |
:103C00008B3F98F08B3F19F4809113020EC08C3FCC |
:103C100019F48091150209C08D3F19F480911702A3 |
:103C200004C08E3F21F48091190280938501809118 |
:103C30008501882319F41092850104C08F3F11F487 |
:103C4000809385018091F4048B3F98F08B3F19F4A9 |
:103C5000809113020EC08C3F19F48091150209C0A7 |
:103C60008D3F19F48091170204C08E3F21F480919A |
:103C700019028093860180918601882319F410929D |
:103C8000860104C08F3F11F4809386018091F50472 |
:103C90008B3F98F08B3F19F4809113020EC08C3F3C |
:103CA00019F48091150209C08D3F19F48091170213 |
:103CB00004C08E3F21F48091190280938701809186 |
:103CC00087018B3010F48AE002C08F3F11F480939B |
:103CD00087018091F6048B3F98F08B3F19F4809117 |
:103CE00013020EC08C3F19F48091150209C08D3F5C |
:103CF00019F48091170204C08E3F21F480911902BB |
:103D00008093880180918801882319F4109288019A |
:103D100004C08F3F11F4809388018091FB048B3F96 |
:103D200098F08B3F19F4809113020EC08C3F19F468 |
:103D30008091150209C08D3F19F48091170204C0CB |
:103D40008E3F21F48091190280938A0180918A012B |
:103D5000882319F410928A0104C08F3F11F48093D4 |
:103D60008A018091FC048B3F98F08B3F19F480917D |
:103D700013020EC08C3F19F48091150209C08D3FCB |
:103D800019F48091170204C08E3F21F4809119022A |
:103D90008093270280912702882319F4109227022A |
:103DA00004C08F3F11F4809327028091FD048B3F64 |
:103DB00098F08B3F19F4809113020EC08C3F19F4D8 |
:103DC0008091150209C08D3F19F48091170204C03B |
:103DD0008E3F21F48091190280932802809128025D |
:103DE000882319F41092280204C08F3F11F48093A5 |
:103DF00028028091FE048B3F98F08B3F19F480914C |
:103E000013020EC08C3F19F48091150209C08D3F3A |
:103E100019F48091170204C08E3F21F48091190299 |
:103E20008093290280912902882319F41092290293 |
:103E300004C08F3F11F4809329028091FF048B3FCF |
:103E400098F08B3F19F4809113020EC08C3F19F447 |
:103E50008091150209C08D3F19F48091170204C0AA |
:103E60008E3F21F48091190280932A0280912A02C8 |
:103E7000882319F410922A0204C08F3F11F4809312 |
:103E80002A02909100059B3FB0F09B3F19F480916E |
:103E9000130204C09C3F29F48091150280938B018A |
:103EA0000CC09D3F19F480911702F8CF9E3F29F472 |
:103EB00080911902F3CF90938B0180918B0188231D |
:103EC00019F410928B0104C08F3F11F480938B0181 |
:103ED0009B3FB0F09B3F19F48091130204C09C3FBC |
:103EE00029F48091150280938B010CC09D3F19F439 |
:103EF00080911702F8CF9E3F29F480911902F3CFE9 |
:103F000090938B0180918B01882319F410928B017F |
:103F100004C08F3F11F480938B019B3FB0F09B3F17 |
:103F200019F48091130204C09C3F29F4809115027A |
:103F300080938B010CC09D3F19F480911702F8CF3C |
:103F40009E3F29F480911902F3CF90938B018091C9 |
:103F50008B01882319F410928B0104C08F3F11F458 |
:103F600080938B0110918A01612F772767FD7095EF |
:103F7000872F972F0E947D2D17FF06C020E030E08D |
:103F800040E853E40E94D82C27E137EB41ED58E399 |
:103F90000E94F72D60937E0170937F0180938001D2 |
:103FA000909381018091F20480932E058091F10419 |
:103FB00080931D051F91089581E08093DF0442E006 |
:103FC0004093E00483E08093E10494E09093E20462 |
:103FD00035E03093E30486E08093E40487E0809347 |
:103FE000E5041092E7048EE18093E8048BEF809360 |
:103FF000EA048AE08093EB0422E32093E90420930F |
:10400000ED044093EC049093EE041092EF0490E1E1 |
:104010009093F0048FE08093F1048AEF8093F20490 |
:104020008AE18093F3049093F4048FEA8093F5047B |
:104030008093F6048AE58093F70483E28093F80482 |
:1040400084E18093F9041092FA043093FB0482EB2C |
:104050008093FC041092FD041092FE041092FF0461 |
:1040600084E68093000588E280930105109205059F |
:104070002093020586E98093030530930405ADE0A3 |
:10408000B5E0EAE6F1E08CE001900D928150E1F7B5 |
:10409000089581E08093DF0452E05093E00483E0D0 |
:1040A0008093E10444E04093E20435E03093E3047C |
:1040B00086E08093E40487E08093E50428E0209381 |
:1040C000E6041092E7049EE19093E8048BEF80935E |
:1040D000EA048AE08093EB0486E48093E9049093F9 |
:1040E000ED045093EC044093EE042093EF0490E130 |
:1040F0009093F0048FE08093F1048AEF8093F204B0 |
:104100008AE18093F3049093F40488E78093F504A4 |
:1041100096E99093F6048AE58093F70483E280930E |
:10412000F80484E18093F9041092FA043093FB04BC |
:1041300082EB8093FC041092FD041092FE04109216 |
:10414000FF0484E68093000588E2809301051092C5 |
:10415000050582E3809302059093030530930405DF |
:10416000ADE0B5E0E2E7F1E08CE001900D92815026 |
:10417000E1F7089580912202882301F510926702E9 |
:104180001092660210926A0210926C02809196015F |
:10419000882311F08093660280919701882311F0A3 |
:1041A0008093670280919801882311F080936C02BC |
:1041B00080919901882311F080936A0280916602B0 |
:1041C000992790937A0480937904809167029927C4 |
:1041D00090937C0480937B0480916C029927909348 |
:1041E0007E0480937D0480916A02992790938004D5 |
:1041F00080937F041092CB011092CC010E943A1858 |
:104200000895CF93DF931092250510922405109204 |
:1042100027051092260580E090E0A0E0B0E08093B2 |
:10422000280590932905A0932A05B0932B05109299 |
:10423000D4011092D3011092D6011092D5011092A0 |
:10424000D8011092D7010E94F31B85E090E00E94F4 |
:104250009D0BEC01CE010E94A60B8823D9F30E948E |
:10426000F31B8091E70480FF10C080910C019091B6 |
:104270000D01875B934038F480910C0190910D0102 |
:104280008E5E924010F40E94271080911B05909141 |
:104290001C0597FF03C0909581959F4F9093D40183 |
:1042A0008093D3018091190590911A0597FF03C05F |
:1042B000909581959F4F9093D6018093D5018091E1 |
:1042C0002F059091300597FF03C0909581959F4FE2 |
:1042D0009093D8018093D70188E0E4E2F5E0A5E36C |
:1042E000B1E0182E0E94072F1092EF011092F001FA |
:1042F0001092F1011092F2011092F3011092F40168 |
:104300001092F5011092F6011092F7011092F80147 |
:104310001092F9011092FA011092FB011092FC0127 |
:104320001092FD011092FE011092FF011092000206 |
:10433000109201021092020210921C0510921B05AD |
:1043400010921A05109219051092300510922F053F |
:104350008091080190910901A0910A01B0910B018F |
:1043600090938704809386041092C0011092BF013D |
:1043700010920702109208021092090210920A028B |
:1043800080910B0290910C0290930E0280930D028B |
:104390000E94A02C82E390E09093A7018093A60155 |
:1043A000DF91CF910895CF93DF931092250510925E |
:1043B0002405109227051092260580E090E0A0E0E9 |
:1043C000B0E08093280590932905A0932A05B09327 |
:1043D0002B050E94F31B85E090E00E949D0BEC01F1 |
:1043E000CE010E94A60B8823D9F30E94F31B809173 |
:1043F0002C0590912D05C4E2D5E097FF03C0909560 |
:1044000081959F4F60E170E00E94722E70932505A8 |
:1044100060932405809135059091360597FF03C080 |
:10442000909581959F4F60E170E00E94722E70938D |
:104430002705609326056091840470918504882780 |
:1044400077FD8095982F0E947D2D609328057093AD |
:10445000290580932A0590932B0588E0A5E3B1E018 |
:10446000FE01182E0E94182FDF91CF9108951F93FF |
:10447000182F0EC080912202882361F484E690E018 |
:104480009093A7018093A6018AEF90E00E94120DFD |
:10449000115080F71F910895A8E0B0E0E2E5F2E244 |
:1044A0000C94C22E0E949419299AE091E104AE2F37 |
:1044B000BB27AA0FBB1FAD54BB4F0D90BC91A02DC5 |
:1044C0009D0128583F4F3A83298337FF02C01A8243 |
:1044D000198280911B02843608F04AC08091010144 |
:1044E000882331F484EF91E09093A7018093A60193 |
:1044F0008091360290913702009731F001979093A6 |
:1045000037028093360204C01092220210921102E8 |
:10451000289A8091310290913202815D974028F172 |
:104520008091F804482F55275A83498381E080936E |
:104530001102E091DF04FF27EE0FFF1FED54FB4F48 |
:1045400011821082E091E004FF27EE0FFF1FED546F |
:10455000FB4F11821082E091E204FF27EE0FFF1F54 |
:10456000ED54FB4F11821082CEC110922202CBC1BA |
:1045700080911B028D3808F4C6C1109211028091FF |
:10458000F90422E3829FC0011124909337028093A3 |
:10459000360269817A81693271056CF0809131024D |
:1045A000909132027FEF8F3F970781F101969093B0 |
:1045B0003202809331028091310290913202883C24 |
:1045C000910520F089819A81889704F510924C0218 |
:1045D00010924D0210924E0210924F021092480219 |
:1045E0001092490210924A0210924B021092FF015F |
:1045F0001092000210920102109202021092030225 |
:10460000109204021092050210920602E981FA81CA |
:10461000E93CF1050CF4D6C080912202882309F010 |
:1046200072C1E091E204FF27EE0FFF1FED54FB4F34 |
:10463000808191818C3491050CF4C1C08091350248 |
:104640008F5F80933502893C08F45DC129980E94F0 |
:104650000121109222021092350210923202109221 |
:1046600031028091DF04282F3327F901EE0FFF1F5D |
:10467000ED54FB4F80819181873491059CF4E0914A |
:10468000E004FF27EE0FFF1FED54FB4F0190F08178 |
:10469000E02DF7FF03C0F095E195FF4FE734F105FA |
:1046A0000CF46CC08091E004682F7727DB01AA0F1F |
:1046B000BB1FAD54BB4F8D919C91119787349105D1 |
:1046C0003CF0F901EE0FFF1FED54FB4F808191810B |
:1046D0008D919C918734910564F0F901EE0FFF1FD5 |
:1046E000ED54FB4F808191818734910514F042E0B5 |
:1046F00001C041E0FB01EE0FFF1FED54FB4F808135 |
:104700009181863491055CF4F901EE0FFF1FED54A1 |
:10471000FB4F80819181873491050CF043E0FB01D0 |
:10472000EE0FFF1FED54FB4F808191818A5B9F4FFD |
:104730005CF4F901EE0FFF1FED54FB4F8081918176 |
:10474000873491050CF044E0660F771F6D547B4F62 |
:10475000FB01808191818A5B9F4F5CF4220F331FA4 |
:104760002D543B4FF90180819181863491050CF4E1 |
:1047700045E0A2E0B0E0042E0E940C2F0E94B1039D |
:104780004AE36FED74E00E94D2030E94B1030E94DD |
:1047900037228091E70480FFB6C080910C01909190 |
:1047A0000D01875B934040F480910C0190910D01C5 |
:1047B0008E5E924008F0A7C00E942710A4C01092FD |
:1047C0003502A1C049815A81433251050CF09BC08A |
:1047D0008091E204482F5527FA01EE0FFF1FED5498 |
:1047E000FB4F80819181855B9F4F0CF06DC0809164 |
:1047F00034028F5F80933402893C08F467C088ECF0 |
:104800008093340281E090E09093320280933102F1 |
:1048100081E080932202109244021092450210928D |
:104820004602109247021092FF011092000210926D |
:1048300001021092020210920302109204021092DE |
:104840000502109206021092EF011092F0011092F0 |
:10485000F1011092F2011092F7011092F8011092FA |
:10486000F9011092FA018091DB019091DC01A09195 |
:10487000DD01B091DE018093F3019093F401A093E8 |
:10488000F501B093F6018091E3019091E401A091CC |
:10489000E501B091E6018093FB019093FC01A093A8 |
:1048A000FD01B093FE0110924C0210924D02109245 |
:1048B0004E0210924F02109248021092490210923A |
:1048C0004A0210924B0202C010923402440F551F4C |
:1048D0004D545B4FFA01808191818C3491058CF0AD |
:1048E000809133028F5F80933302893C60F0109295 |
:1048F000220288EC8093330210923202109231022D |
:1049000002C0109233028091690181508093690145 |
:10491000809169018F3F29F080911102882309F469 |
:1049200012C10E948F1DE091DF04FF27EE0FFF1FD1 |
:10493000DF01AD54BB4F8D919C916091EE047727C0 |
:10494000E753FB4F208131814091EF045527FC0153 |
:10495000E69FC001E79F900DF69F900D1124F9018D |
:10496000E49F9001E59F300DF49F300D1124820FDC |
:10497000931F90931D0280931C02E091E004FF2797 |
:10498000EE0FFF1FDF01AD54BB4F8D919C91E7539C |
:10499000FB4F20813181FC01E69FC001E79F900D14 |
:1049A000F69F900D1124B901649F9001659F300D11 |
:1049B000749F300D1124820F931F90931F028093D8 |
:1049C0001E02E091E204FF27EE0FFF1FED54FB4FA4 |
:1049D00080819181909581959F4F90932102809342 |
:1049E000200210918701612F772767FD7095872F2F |
:1049F000972F0E947D2D17FF06C020E030E040E891 |
:104A000053E40E94D82C20E030E040E251E40E94C0 |
:104A1000D82C20E030E040E85BE30E94F72D5B01FA |
:104A20006C01609331057093320580933305909348 |
:104A3000340510918801612F772767FD7095872FC6 |
:104A4000972F0E947D2D17FF06C020E030E040E840 |
:104A500053E40E94D82C20E030EE4BE257E40E9451 |
:104A60001A2D609320057093210580932205909361 |
:104A700023058091E70482FF0CC080E090E0A0E075 |
:104A8000B0E08093200590932105A0932205B09378 |
:104A9000230520E030E040E050E0C601B5010E946F |
:104AA000872D882364F480E090E0A0E0B0E080935C |
:104AB000310590933205A0933305B093340520E07F |
:104AC00030E040E050E06091200570912105809138 |
:104AD0002205909123050E94872D882364F480E0AD |
:104AE00090E0A0E0B0E08093200590932105A09392 |
:104AF0002205B093230580911102882321F11092A1 |
:104B000021021092200210921D0210921C0210929B |
:104B10001F0210921E028DEC9CECACECBDE3809366 |
:104B2000310590933205A0933305B09334058AE0A4 |
:104B300097EDA3EABBE38093200590932105A09312 |
:104B40002205B09323058091C1019091C2018D543B |
:104B5000914008F490C02091DF013091E001409134 |
:104B6000E1015091E2018091DB019091DC01A09183 |
:104B7000DD01B091DE01B901681B790B70933B0236 |
:104B800060933A022091E7013091E8014091E901F8 |
:104B90005091EA018091E3019091E401A091E50137 |
:104BA000B091E601281B390B30933902209338026B |
:104BB0001092C2011092C101673A710534F08091E0 |
:104BC000D3019091D401019608C06A557F4F4CF4EF |
:104BD0008091D3019091D40101979093D401809357 |
:104BE000D301273A310534F08091D5019091D60157 |
:104BF000019608C02A553F4F4CF48091D501909101 |
:104C0000D60101979093D6018093D50110927A0036 |
:104C10008091DB019091DC01A091DD01B091DE017A |
:104C20008093F3019093F401A093F501B093F60102 |
:104C30008091E3019091E401A091E501B091E6013A |
:104C40008093FB019093FC01A093FD01B093FE01C2 |
:104C50008091EB019091EC01A091ED01B091EE01FA |
:104C60008093030290930402A0930502B09306027E |
:104C70008FEC80937A006091DB017091DC01809170 |
:104C8000DD019091DE012091F304622E77248824C7 |
:104C90009924E0902C05F0902D05A40193010E9429 |
:104CA000A72E0027F7FC0095102F2E193F09400B67 |
:104CB000510BCA01B90120E130E040E050E00E9410 |
:104CC000A72E59016A01209340023093410240937C |
:104CD0004202509343026091E3017091E40180919C |
:104CE000E5019091E601E0903505F0903605A401CC |
:104CF00093010E94A72E0027F7FC0095102F2E1974 |
:104D00003F09400B510BCA01B90120E130E040E0FE |
:104D100050E00E94A72E20933C0230933D02409326 |
:104D20003E0250933F02E5EFAE16E1E0BE06E0E042 |
:104D3000CE06E0E0DE062CF084EF91E0A0E0B0E0EB |
:104D40000DC0FCE0AF16FEEFBF06FFEFCF06FFEF92 |
:104D5000DF0664F48CE09EEFAFEFBFEF809340027C |
:104D600090934102A0934202B0934302253F61E039 |
:104D7000360760E0460760E056072CF084EF91E0CC |
:104D8000A0E0B0E009C02C503E4F4F4F5F4F64F49D |
:104D90008CE09EEFAFEFBFEF80933C0290933D021B |
:104DA000A0933E02B0933F0210927A008091EF01EF |
:104DB0009091F001A091F101B091F2012091400297 |
:104DC000309141024091420250914302821B930B69 |
:104DD000A40BB50B8093EF019093F001A093F10128 |
:104DE000B093F2018091F7019091F801A091F9013F |
:104DF000B091FA0120913C0230913D0240913E0277 |
:104E000050913F02821B930BA40BB50B8093F701CB |
:104E10009093F801A093F901B093FA0180912002D8 |
:104E2000909121029C01442737FD4095542F2B83FC |
:104E30003C834D835E83209344023093450240932C |
:104E400046025093470297FF03C0909581959F4F6C |
:104E500084973CF08091E70484FD03C081E0809357 |
:104E60002D02A090FF01B0900002C0900102D090EE |
:104E700002028B819C8197FF03C0909581959F4F83 |
:104E80007C010027F7FC0095102F2091F0043327B8 |
:104E9000442755276B817C818D819E810E943F2E06 |
:104EA0009B01AC01C801B7010E943F2E20E031E018 |
:104EB00040E050E00E94A72E442737FD4095542F34 |
:104EC000A21AB30AC40AD50AA092FF01B092000246 |
:104ED000C0920102D09202028091FF0190910002E3 |
:104EE000A0910102B091020281539547A040B040C9 |
:104EF00064F080E395E7A0E0B0E08093FF01909339 |
:104F00000002A0930102B09302028091FF019091F0 |
:104F10000002A0910102B0910202805D9A48AF4F59 |
:104F2000BF4F64F480ED9AE8AFEFBFEF8093FF01CD |
:104F300090930002A0930102B09302028FEC809341 |
:104F40007A008091E704E82FFF27F887EF83E3FFDB |
:104F50009DC06091DB017091DC018091DD01909139 |
:104F6000DE0120E034E040E050E00E94A72E8901FD |
:104F700037FF03C0109501951F4F6091E3017091B9 |
:104F8000E4018091E5019091E60120E034E040E009 |
:104F900050E00E94A72EB90137FF03C070956195BC |
:104FA0007F4F601771070CF4B80163327105A4F4E8 |
:104FB00080912D02882381F080912B0290912C0208 |
:104FC000892B51F480910B0290910C0290930E0268 |
:104FD00080930D0210922D02209186013327629F4B |
:104FE000C001639F900D729F900D112460E470E0EA |
:104FF0000E94722EA901461B570B141615060CF0C1 |
:105000003FC010927A0020912B0230912C02211582 |
:10501000310561F50091FF0110910002209101021C |
:105020003091020280910F0290911002BC01649FA6 |
:10503000C001659F900D749F900D112460E270E097 |
:105040000E94722E882777FD8095982F060F171FD4 |
:10505000281F391F0093FF011093000220930102C3 |
:10506000309302028FEC80937A0010C08FEC809313 |
:105070007A002150304030932C0220932B0206C03E |
:1050800084EF91E090932C0280932B028091600436 |
:105090008F5F8093600480912E02815080932E0256 |
:1050A0008F3F09F063C081E380932E026091DB01A2 |
:1050B0007091DC018091DD019091DE01A4019301EA |
:1050C0000E94A72E30936204209361046091E30153 |
:1050D0007091E4018091E5019091E601A4019301B2 |
:1050E0000E94A72E309364042093630480912C05C2 |
:1050F00090912D0590936604809365048091350509 |
:1051000090913605909368048093670480912F05F1 |
:105110009091300590936A048093690480912302F2 |
:105120009091240290936C0480936B046091070229 |
:10513000709108028091090290910A0220E032E009 |
:1051400040E050E00E94A72E30936E0420936D043F |
:1051500089819A819093700480936F0480910B02EF |
:1051600090910C0290937204809371046091DB0122 |
:105170007091DC018091DD019091DE01209020058D |
:10518000309021054090220550902305E0901B05AA |
:10519000F0901C05609031057090320580903305C9 |
:1051A000909034050E947D2DA20191010E94F72D5F |
:1051B0005B016C010027F7FC0095102FC801B701B7 |
:1051C0000E947D2DA40193010E94F72D9B01AC014B |
:1051D000C601B5010E94D82C0E94602D70931C0559 |
:1051E00060931B056091E3017091E4018091E501FA |
:1051F0009091E601E0901905F0901A050E947D2D2E |
:10520000A20191010E94F72D5B016C010027F7FCC0 |
:105210000095102FC801B7010E947D2DA4019301B4 |
:105220000E94F72D9B01AC01C601B5010E94D82C4C |
:105230000E94602D70931A056093190560912F05E7 |
:1052400070913005A090EB01B090EC01C090ED01A1 |
:10525000D090EE01882777FD8095982F0E947D2DB4 |
:105260007B018C0120E030E040E05FE3C401B3014A |
:105270000E94F72D9B01AC01C801B7010E94F72DD8 |
:105280007B018C01C601B5010E947D2DA201910117 |
:105290000E94F72D9B01AC01C801B7010E94D82CD8 |
:1052A0000E94602D7093300560932F0580911B053F |
:1052B00090911C058150984034F080E098E09093E4 |
:1052C0001C0580931B0580911B0590911C05805047 |
:1052D000984F34F480E098EF90931C0580931B0561 |
:1052E0008091190590911A058150984034F080E022 |
:1052F00098E090931A058093190580911905909173 |
:105300001A058050984F34F480E098EF90931A0576 |
:105310008093190580912F05909130058150984018 |
:1053200034F080E098E09093300580932F058091D1 |
:105330002F05909130058050984F34F480E098EF1D |
:105340009093300580932F056F8160FFCDC09091C1 |
:10535000830161FF0EC09233B0F4809123029091DB |
:105360002402449790932602809325021092120201 |
:105370000DC08091EC04989FC00111244497909334 |
:1053800026028093250281E080931202809111020F |
:10539000882321F0109226021092250220912302E8 |
:1053A0003091240240912502509126024217530762 |
:1053B0000CF09AC080911202882309F495C0241B36 |
:1053C000350B809184019927FC012E9FC0012F9FEE |
:1053D000900D3E9F900D112460E170E00E94722EAE |
:1053E00009811A81061B170B2091BF013091C00162 |
:1053F000809182019927AC01249FC001259F900DC7 |
:10540000349F900D112468E070E00E94722E061BFC |
:10541000170B609107027091080280910902909128 |
:105420000A0220E032E040E050E00E94A72ECA01CC |
:10543000B901209185013327442755270E943F2E2B |
:1054400020E230E040E050E00E94A72E5FEF2E3CCB |
:10545000350714F42EEC3FEF80912F02909130022B |
:10546000AC0164E0440F551F6A95E1F7481B590BE6 |
:105470002333310514F022E330E0021B130BCA0181 |
:10548000800F911F60E170E00E94722E70933002D5 |
:1054900060932F028091E8049927681779078CF4AC |
:1054A00069817A81681779072CF090933002809394 |
:1054B0002F0207C089819A819093300280932F0236 |
:1054C0000DC080912F0290913002E981FA81E81796 |
:1054D000F90724F4F0933002E0932F0220912F0279 |
:1054E000309130023A832983C0902F05D090300547 |
:1054F0004B815C81C41AD50A55E6C516D10424F047 |
:1055000014E6C12ED12C09C06CE9C6166FEFD60681 |
:1055100024F4BCE9CB2EBFEFDB2E40907A015090F3 |
:105520007B0160907C0170907D0160911B05709102 |
:105530001C0520911C0230911D0240915002509197 |
:105540005102241B350B621B730B882777FD809556 |
:10555000982F0E947D2D9B01AC01C301B2010E94D6 |
:10556000F72D0E94602D709369026093680280910C |
:105570006802909169028C01222717FD2095322F35 |
:1055800080914C0290914D02A0914E02B0914F0239 |
:10559000080F191F2A1F3B1F00934C0210934D0246 |
:1055A00020934E0230934F02101611061206130676 |
:1055B000ACF4C80117FF03C0909581959F4F60E040 |
:1055C00071E00E94722E6F5F7F4F882777FD809574 |
:1055D000982F061B170B280B390B14C0C80117FF97 |
:1055E00003C0909581959F4F60E071E00E94722EFC |
:1055F0006F5F7F4F882777FD8095982F060F171FC5 |
:10560000281F391F00934C0210934D0220934E0225 |
:1056100030934F0280914C0290914D02A0914E0226 |
:10562000B0914F0281387EE3970770E0A70770E0E2 |
:10563000B7072CF080E89EE3A0E0B0E009C08058F6 |
:10564000914CAF4FBF4F64F480E891ECAFEFBFEFE8 |
:1056500080934C0290934D02A0934E02B0934F0260 |
:10566000609168027091690280907E0190907F0144 |
:10567000A0908001B0908101882777FD8095982FB8 |
:105680000E947D2D7B018C0160914C0270914D0236 |
:1056900080914E0290914F020E947D2D9B01AC01A2 |
:1056A000C501B4010E94F72D9B01AC01C801B701EF |
:1056B0000E94D82C0E94602D9601260F371F498129 |
:1056C0005A81240F351F22244A30510514F4A1E0D9 |
:1056D0002A2E37FD02C0222019F040E050E008C019 |
:1056E00080912E05482F5527241735070CF4A90162 |
:1056F00080911D05E82FFF27F887EF839F01E417AE |
:10570000F5070CF49A012093660229813A81261B41 |
:10571000370BB9016C0D7D1D77FD02C0222019F0F9 |
:1057200080E090E007C080912E05992768177907DF |
:105730000CF4CB012F813885281739070CF49C0114 |
:10574000209367026091190570911A0520911E023D |
:1057500030911F024091520250915302241B350B8D |
:10576000621B730B882777FD8095982F0E947D2DF3 |
:105770009B01AC01C301B2010E94F72D0E94602D74 |
:105780007093650260936402809164029091650257 |
:105790008C01222717FD2095322F8091480290918D |
:1057A0004902A0914A02B0914B02080F191F2A1F0B |
:1057B0003B1F009348021093490220934A02309302 |
:1057C0004B021016110612061306ACF4C80117FF9F |
:1057D00003C0909581959F4F60E071E00E94722E0A |
:1057E0006F5F7F4F882777FD8095982F061B170BDB |
:1057F000280B390B14C0C80117FF03C09095819581 |
:105800009F4F60E071E00E94722E6F5F7F4F88278C |
:1058100077FD8095982F060F171F281F391F0093BB |
:1058200048021093490220934A0230934B02809120 |
:10583000480290914902A0914A02B0914B028138EE |
:105840003EE3930730E0A30730E0B3072CF080E895 |
:105850009EE3A0E0B0E009C08058914CAF4FBF4F2D |
:1058600064F480E891ECAFEFBFEF8093480290932F |
:105870004902A0934A02B0934B0260916402709176 |
:105880006502882777FD8095982F0E947D2D7B01EA |
:105890008C01609148027091490280914A02909176 |
:1058A0004B020E947D2D9B01AC01C501B4010E94F9 |
:1058B000F72D9B01AC01C801B7010E94D82C0E94B2 |
:1058C000602D29813A81260F371F2C193D0937FD9C |
:1058D00002C0222019F040E050E008C080912E055F |
:1058E000482F5527241735070CF4A9012F81388537 |
:1058F000241735070CF49A0120936C0289819A8150 |
:10590000861B970BBC016C197D0977FD02C0222014 |
:1059100019F020E030E008C080912E05282F3327B1 |
:10592000621773070CF49B018F8198858217930788 |
:105930000CF4C90180936A02E2E1C85F0C94DE2E88 |
:105940008091540290915502A0915602B091570255 |
:1059500080935C0290935D02A0935E02B0935F021D |
:105960008091580290915902A0915A02B0915B0225 |
:105970008093600290936102A0936202B0936302ED |
:1059800008951092510210925002109253021092F8 |
:1059900052020895FC014150504030F0019006162B |
:1059A000D1F73197CF010895882799270895505846 |
:1059B000192EEFD001D0D2C0BA176207730784073F |
:1059C0009507B1F188F40EF410940B2EBA2FA02D88 |
:1059D000062E622F202D072E732F302D082E842F98 |
:1059E000402D092E952F502DFF275523B9F0591B17 |
:1059F00049F0573E98F0469537952795A795F04082 |
:105A00005395C9F776F0BA0F621F731F841F30F4E5 |
:105A1000879577956795B795F040939517FA0F2E70 |
:105A20000895BF1BBB27BA0B620B730B840BF6CF19 |
:105A3000DEF6DBC0AED001D091C0552359F09923DA |
:105A400069F09F575F57951B33F442F4903811F477 |
:105A5000915805C09BC091589F3F09F4C6C0BB2711 |
:105A6000112462177307840730F4660F771F881FAD |
:105A7000BB1F915098F311D00F920FD00F920DD001 |
:105A8000A0E82617370748071B0609F0A048BA2FD9 |
:105A9000602D7F918F9100240895A0E80024621763 |
:105AA00073078407B10528F0621B730B840BB109DF |
:105AB0000A2A660F771F881FBB1FA69581F70895D6 |
:105AC00097FB73D09F3738F0FEE9F91B982F872F8B |
:105AD000762F6B2F05C086C096958795779567952D |
:105AE000F150D0F73EF490958095709561957F4F79 |
:105AF0008F4F9F4F0895E89403C097FB0EF4F3DF98 |
:105B0000B62F672F782F892F9EE9002427C00ED04B |
:105B10005EF004C00BD026F001C008D019F020F4CC |
:105B20008FEF089580E0089581E0089597FB092E96 |
:105B3000052600F8689430D0E89407FC07C0621787 |
:105B400073078407950721F008F40094079498944C |
:105B500008959A95BB0F661F771F881F11249923FC |
:105B6000A1F08823B2F79F3F59F0BB0F48F421F40E |
:105B7000002011F460FF04C06F5F7F4F8F4F9F4F75 |
:105B8000881F9795879597F908952CC09FEF80EC13 |
:105B90000895052E092607FA440F551F5F3F79F037 |
:105BA000AA27A51708F051E04795880F991F9F3F36 |
:105BB00031F0BB27B91708F091E0879508959F91C0 |
:105BC0009F911124E3CF97FB880F991F9F3F31F0DE |
:105BD000BB27B91708F091E0879508959F919F9191 |
:105BE0001124E3CF97FB880F991F9F3F31F0BB270C |
:105BF000B91708F091E0879508959F919F9111241E |
:105C0000D4CF66277727882799270895D1DF01D039 |
:105C1000B4CF992339F0552329F09F575F57950F3B |
:105C200013F49AF1F1CF91589F3FE1F3629FA12DB8 |
:105C30000F92BB27639FA00DB11DEE27729FA00D91 |
:105C4000B11DEE1FAF93AA27649FB00DE11D739F96 |
:105C5000B00DE11DAA1F6627829FB00DE11DA61F92 |
:105C60005527749FE00DA11D551F839FE00DA11DB9 |
:105C7000561F849FA00D511D852F7A2F6E2F1F90C8 |
:105C80000F9088231AF4939539F48FCF000C111CD0 |
:105C9000BB1F661F771F881F01280895629FD001D0 |
:105CA000739FF001829FE00DF11D649FE00DF11DD7 |
:105CB000929FF00D839FF00D749FF00D659FF00D86 |
:105CC0009927729FB00DE11DF91F639FB00DE11D73 |
:105CD000F91FBD01CF0111240895AA1BBB1B51E17F |
:105CE00007C0AA1FBB1FA617B70710F0A61BB70B4C |
:105CF000881F991F5A95A9F780959095BC01CD01F1 |
:105D0000089597FB092E07260AD077FD04D0E5DF1A |
:105D100006D000201AF4709561957F4F0895F6F72C |
:105D2000909581959F4F0895A1E21A2EAA1BBB1B47 |
:105D3000FD010DC0AA1FBB1FEE1FFF1FA217B30757 |
:105D4000E407F50720F0A21BB30BE40BF50B661F6D |
:105D5000771F881F991F1A9469F760957095809531 |
:105D600090959B01AC01BD01CF01089597FB092ED1 |
:105D700005260ED057FD04D0D7DF0AD0001C38F41A |
:105D800050954095309521953F4F4F4F5F4F089567 |
:105D9000F6F790958095709561957F4F8F4F9F4F47 |
:105DA00008952F923F924F925F926F927F928F92BF |
:105DB0009F92AF92BF92CF92DF92EF92FF920F939A |
:105DC0001F93CF93DF93CDB7DEB7CA1BDB0B0FB6A4 |
:105DD000F894DEBF0FBECDBF09942A883988488861 |
:105DE0005F846E847D848C849B84AA84B984C884F7 |
:105DF000DF80EE80FD800C811B81AA81B981CE0FEE |
:105E0000D11D0FB6F894DEBF0FBECDBFED010895D2 |
:105E1000EE0FFF1F0590F491E02D0994F999FECF44 |
:105E2000B2BDA1BDF89A119600B40895F7DF0192B2 |
:105E30001A94E1F70895F999FECFB2BDA1BD00BC57 |
:105E400011960FB6F894FA9AF99A0FBE0895019038 |
:0A5E5000F2DF1A94E1F70895FFCF86 |
:105E5A00016420030A016400007D0000FF030102BF |
:105E6A00030405060708090A48616C6C6F20576528 |
:105E7A006C74000000000000000000000000000038 |
:105E8A000000000000000000000000000000000008 |
:105E9A0000000000000000000000000000000000F8 |
:105EAA0000000000000000000000000000000000E8 |
:105EBA0000000000000000000C014B616D6572617A |
:105ECA0000004E6F726D616C00000000803F17B7D2 |
:0C5EDA00D13830FB103A403296020A64C6 |
:105BE0001124D4CF66277727882799270895D1DFF6 |
:105BF00001D0B4CF992339F0552329F09F575F572F |
:105C0000950F13F49AF1F1CF91589F3FE1F3629F02 |
:105C1000A12D0F92BB27639FA00DB11DEE27729F90 |
:105C2000A00DB11DEE1FAF93AA27649FB00DE11D1B |
:105C3000739FB00DE11DAA1F6627829FB00DE11D65 |
:105C4000A61F5527749FE00DA11D551F839FE00DD2 |
:105C5000A11D561F849FA00D511D852F7A2F6E2FD9 |
:105C60001F900F9088231AF4939539F48FCF000C6E |
:105C7000111CBB1F661F771F881F01280895629F94 |
:105C8000D001739FF001829FE00DF11D649FE00D34 |
:105C9000F11D929FF00D839FF00D749FF00D659F95 |
:105CA000F00D9927729FB00DE11DF91F639FB00D94 |
:105CB000E11DF91FBD01CF0111240895AA1BBB1BD3 |
:105CC00051E107C0AA1FBB1FA617B70710F0A61BFC |
:105CD000B70B881F991F5A95A9F780959095BC011D |
:105CE000CD01089597FB092E07260AD077FD04D031 |
:105CF000E5DF06D000201AF4709561957F4F089576 |
:105D0000F6F7909581959F4F0895A1E21A2EAA1B50 |
:105D1000BB1BFD010DC0AA1FBB1FEE1FFF1FA2175B |
:105D2000B307E407F50720F0A21BB30BE40BF50B58 |
:105D3000661F771F881F991F1A9469F760957095E1 |
:105D4000809590959B01AC01BD01CF01089597FB13 |
:105D5000092E05260ED057FD04D0D7DF0AD0001C2F |
:105D600038F450954095309521953F4F4F4F5F4FF8 |
:105D70000895F6F790958095709561957F4F8F4FB8 |
:105D80009F4F08952F923F924F925F926F927F9212 |
:105D90008F929F92AF92BF92CF92DF92EF92FF923B |
:105DA0000F931F93CF93DF93CDB7DEB7CA1BDB0BE7 |
:105DB0000FB6F894DEBF0FBECDBF09942A8839888C |
:105DC00048885F846E847D848C849B84AA84B98493 |
:105DD000C884DF80EE80FD800C811B81AA81B9819F |
:105DE000CE0FD11D0FB6F894DEBF0FBECDBFED01B3 |
:105DF0000895EE0FFF1F0590F491E02D0994F99995 |
:105E0000FECFB2BDA1BDF89A119600B40895F7DF98 |
:105E100001921A94E1F70895F999FECFB2BDA1BDA0 |
:105E200000BC11960FB6F894FA9AF99A0FBE08952D |
:0C5E30000190F2DF1A94E1F70895FFCF13 |
:105E3C00016420030A016400007D0000FF030102DD |
:105E4C00030405060708090A48616C6C6F20576546 |
:105E5C006C74000000000000000000000000000056 |
:105E6C000000000000000000000000000000000026 |
:105E7C000000000000000000000000000000000016 |
:105E8C000000000000000000000000000000000006 |
:105E9C0000000000000000000C014B616D65726198 |
:105EAC0000004E6F726D616C00000000803F17B7F0 |
:0C5EBC00D13830FB103A403296020A64E4 |
:00000001FF |
/branches/v0.60_MicroMag3_Nick666/timer0.c |
---|
48,9 → 48,7 |
if (!cntKompass--) // Aufruf mit 10 Hz |
{ |
int heading; |
heading = heading_MM3(); |
KompassValue = (KompassValue * 3 + heading) / 4; // Filtern |
KompassValue = heading_MM3(); |
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180; |
cntKompass = 980; |
} |
/branches/v0.60_MicroMag3_Nick666/v0.66c/COPYING |
---|
0,0 → 1,674 |
GNU GENERAL PUBLIC LICENSE |
Version 3, 29 June 2007 |
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> |
Everyone is permitted to copy and distribute verbatim copies |
of this license document, but changing it is not allowed. |
Preamble |
The GNU General Public License is a free, copyleft license for |
software and other kinds of works. |
The licenses for most software and other practical works are designed |
to take away your freedom to share and change the works. By contrast, |
the GNU General Public License is intended to guarantee your freedom to |
share and change all versions of a program--to make sure it remains free |
software for all its users. We, the Free Software Foundation, use the |
GNU General Public License for most of our software; it applies also to |
any other work released this way by its authors. You can apply it to |
your programs, too. |
When we speak of free software, we are referring to freedom, not |
price. Our General Public Licenses are designed to make sure that you |
have the freedom to distribute copies of free software (and charge for |
them if you wish), that you receive source code or can get it if you |
want it, that you can change the software or use pieces of it in new |
free programs, and that you know you can do these things. |
To protect your rights, we need to prevent others from denying you |
these rights or asking you to surrender the rights. Therefore, you have |
certain responsibilities if you distribute copies of the software, or if |
you modify it: responsibilities to respect the freedom of others. |
For example, if you distribute copies of such a program, whether |
gratis or for a fee, you must pass on to the recipients the same |
freedoms that you received. You must make sure that they, too, receive |
or can get the source code. And you must show them these terms so they |
know their rights. |
Developers that use the GNU GPL protect your rights with two steps: |
(1) assert copyright on the software, and (2) offer you this License |
giving you legal permission to copy, distribute and/or modify it. |
For the developers' and authors' protection, the GPL clearly explains |
that there is no warranty for this free software. For both users' and |
authors' sake, the GPL requires that modified versions be marked as |
changed, so that their problems will not be attributed erroneously to |
authors of previous versions. |
Some devices are designed to deny users access to install or run |
modified versions of the software inside them, although the manufacturer |
can do so. This is fundamentally incompatible with the aim of |
protecting users' freedom to change the software. The systematic |
pattern of such abuse occurs in the area of products for individuals to |
use, which is precisely where it is most unacceptable. Therefore, we |
have designed this version of the GPL to prohibit the practice for those |
products. If such problems arise substantially in other domains, we |
stand ready to extend this provision to those domains in future versions |
of the GPL, as needed to protect the freedom of users. |
Finally, every program is threatened constantly by software patents. |
States should not allow patents to restrict development and use of |
software on general-purpose computers, but in those that do, we wish to |
avoid the special danger that patents applied to a free program could |
make it effectively proprietary. To prevent this, the GPL assures that |
patents cannot be used to render the program non-free. |
The precise terms and conditions for copying, distribution and |
modification follow. |
TERMS AND CONDITIONS |
0. Definitions. |
"This License" refers to version 3 of the GNU General Public License. |
"Copyright" also means copyright-like laws that apply to other kinds of |
works, such as semiconductor masks. |
"The Program" refers to any copyrightable work licensed under this |
License. Each licensee is addressed as "you". "Licensees" and |
"recipients" may be individuals or organizations. |
To "modify" a work means to copy from or adapt all or part of the work |
in a fashion requiring copyright permission, other than the making of an |
exact copy. The resulting work is called a "modified version" of the |
earlier work or a work "based on" the earlier work. |
A "covered work" means either the unmodified Program or a work based |
on the Program. |
To "propagate" a work means to do anything with it that, without |
permission, would make you directly or secondarily liable for |
infringement under applicable copyright law, except executing it on a |
computer or modifying a private copy. Propagation includes copying, |
distribution (with or without modification), making available to the |
public, and in some countries other activities as well. |
To "convey" a work means any kind of propagation that enables other |
parties to make or receive copies. Mere interaction with a user through |
a computer network, with no transfer of a copy, is not conveying. |
An interactive user interface displays "Appropriate Legal Notices" |
to the extent that it includes a convenient and prominently visible |
feature that (1) displays an appropriate copyright notice, and (2) |
tells the user that there is no warranty for the work (except to the |
extent that warranties are provided), that licensees may convey the |
work under this License, and how to view a copy of this License. If |
the interface presents a list of user commands or options, such as a |
menu, a prominent item in the list meets this criterion. |
1. Source Code. |
The "source code" for a work means the preferred form of the work |
for making modifications to it. "Object code" means any non-source |
form of a work. |
A "Standard Interface" means an interface that either is an official |
standard defined by a recognized standards body, or, in the case of |
interfaces specified for a particular programming language, one that |
is widely used among developers working in that language. |
The "System Libraries" of an executable work include anything, other |
than the work as a whole, that (a) is included in the normal form of |
packaging a Major Component, but which is not part of that Major |
Component, and (b) serves only to enable use of the work with that |
Major Component, or to implement a Standard Interface for which an |
implementation is available to the public in source code form. A |
"Major Component", in this context, means a major essential component |
(kernel, window system, and so on) of the specific operating system |
(if any) on which the executable work runs, or a compiler used to |
produce the work, or an object code interpreter used to run it. |
The "Corresponding Source" for a work in object code form means all |
the source code needed to generate, install, and (for an executable |
work) run the object code and to modify the work, including scripts to |
control those activities. However, it does not include the work's |
System Libraries, or general-purpose tools or generally available free |
programs which are used unmodified in performing those activities but |
which are not part of the work. For example, Corresponding Source |
includes interface definition files associated with source files for |
the work, and the source code for shared libraries and dynamically |
linked subprograms that the work is specifically designed to require, |
such as by intimate data communication or control flow between those |
subprograms and other parts of the work. |
The Corresponding Source need not include anything that users |
can regenerate automatically from other parts of the Corresponding |
Source. |
The Corresponding Source for a work in source code form is that |
same work. |
2. Basic Permissions. |
All rights granted under this License are granted for the term of |
copyright on the Program, and are irrevocable provided the stated |
conditions are met. This License explicitly affirms your unlimited |
permission to run the unmodified Program. The output from running a |
covered work is covered by this License only if the output, given its |
content, constitutes a covered work. This License acknowledges your |
rights of fair use or other equivalent, as provided by copyright law. |
You may make, run and propagate covered works that you do not |
convey, without conditions so long as your license otherwise remains |
in force. You may convey covered works to others for the sole purpose |
of having them make modifications exclusively for you, or provide you |
with facilities for running those works, provided that you comply with |
the terms of this License in conveying all material for which you do |
not control copyright. Those thus making or running the covered works |
for you must do so exclusively on your behalf, under your direction |
and control, on terms that prohibit them from making any copies of |
your copyrighted material outside their relationship with you. |
Conveying under any other circumstances is permitted solely under |
the conditions stated below. Sublicensing is not allowed; section 10 |
makes it unnecessary. |
3. Protecting Users' Legal Rights From Anti-Circumvention Law. |
No covered work shall be deemed part of an effective technological |
measure under any applicable law fulfilling obligations under article |
11 of the WIPO copyright treaty adopted on 20 December 1996, or |
similar laws prohibiting or restricting circumvention of such |
measures. |
When you convey a covered work, you waive any legal power to forbid |
circumvention of technological measures to the extent such circumvention |
is effected by exercising rights under this License with respect to |
the covered work, and you disclaim any intention to limit operation or |
modification of the work as a means of enforcing, against the work's |
users, your or third parties' legal rights to forbid circumvention of |
technological measures. |
4. Conveying Verbatim Copies. |
You may convey verbatim copies of the Program's source code as you |
receive it, in any medium, provided that you conspicuously and |
appropriately publish on each copy an appropriate copyright notice; |
keep intact all notices stating that this License and any |
non-permissive terms added in accord with section 7 apply to the code; |
keep intact all notices of the absence of any warranty; and give all |
recipients a copy of this License along with the Program. |
You may charge any price or no price for each copy that you convey, |
and you may offer support or warranty protection for a fee. |
5. Conveying Modified Source Versions. |
You may convey a work based on the Program, or the modifications to |
produce it from the Program, in the form of source code under the |
terms of section 4, provided that you also meet all of these conditions: |
a) The work must carry prominent notices stating that you modified |
it, and giving a relevant date. |
b) The work must carry prominent notices stating that it is |
released under this License and any conditions added under section |
7. This requirement modifies the requirement in section 4 to |
"keep intact all notices". |
c) You must license the entire work, as a whole, under this |
License to anyone who comes into possession of a copy. This |
License will therefore apply, along with any applicable section 7 |
additional terms, to the whole of the work, and all its parts, |
regardless of how they are packaged. This License gives no |
permission to license the work in any other way, but it does not |
invalidate such permission if you have separately received it. |
d) If the work has interactive user interfaces, each must display |
Appropriate Legal Notices; however, if the Program has interactive |
interfaces that do not display Appropriate Legal Notices, your |
work need not make them do so. |
A compilation of a covered work with other separate and independent |
works, which are not by their nature extensions of the covered work, |
and which are not combined with it such as to form a larger program, |
in or on a volume of a storage or distribution medium, is called an |
"aggregate" if the compilation and its resulting copyright are not |
used to limit the access or legal rights of the compilation's users |
beyond what the individual works permit. Inclusion of a covered work |
in an aggregate does not cause this License to apply to the other |
parts of the aggregate. |
6. Conveying Non-Source Forms. |
You may convey a covered work in object code form under the terms |
of sections 4 and 5, provided that you also convey the |
machine-readable Corresponding Source under the terms of this License, |
in one of these ways: |
a) Convey the object code in, or embodied in, a physical product |
(including a physical distribution medium), accompanied by the |
Corresponding Source fixed on a durable physical medium |
customarily used for software interchange. |
b) Convey the object code in, or embodied in, a physical product |
(including a physical distribution medium), accompanied by a |
written offer, valid for at least three years and valid for as |
long as you offer spare parts or customer support for that product |
model, to give anyone who possesses the object code either (1) a |
copy of the Corresponding Source for all the software in the |
product that is covered by this License, on a durable physical |
medium customarily used for software interchange, for a price no |
more than your reasonable cost of physically performing this |
conveying of source, or (2) access to copy the |
Corresponding Source from a network server at no charge. |
c) Convey individual copies of the object code with a copy of the |
written offer to provide the Corresponding Source. This |
alternative is allowed only occasionally and noncommercially, and |
only if you received the object code with such an offer, in accord |
with subsection 6b. |
d) Convey the object code by offering access from a designated |
place (gratis or for a charge), and offer equivalent access to the |
Corresponding Source in the same way through the same place at no |
further charge. You need not require recipients to copy the |
Corresponding Source along with the object code. If the place to |
copy the object code is a network server, the Corresponding Source |
may be on a different server (operated by you or a third party) |
that supports equivalent copying facilities, provided you maintain |
clear directions next to the object code saying where to find the |
Corresponding Source. Regardless of what server hosts the |
Corresponding Source, you remain obligated to ensure that it is |
available for as long as needed to satisfy these requirements. |
e) Convey the object code using peer-to-peer transmission, provided |
you inform other peers where the object code and Corresponding |
Source of the work are being offered to the general public at no |
charge under subsection 6d. |
A separable portion of the object code, whose source code is excluded |
from the Corresponding Source as a System Library, need not be |
included in conveying the object code work. |
A "User Product" is either (1) a "consumer product", which means any |
tangible personal property which is normally used for personal, family, |
or household purposes, or (2) anything designed or sold for incorporation |
into a dwelling. In determining whether a product is a consumer product, |
doubtful cases shall be resolved in favor of coverage. For a particular |
product received by a particular user, "normally used" refers to a |
typical or common use of that class of product, regardless of the status |
of the particular user or of the way in which the particular user |
actually uses, or expects or is expected to use, the product. A product |
is a consumer product regardless of whether the product has substantial |
commercial, industrial or non-consumer uses, unless such uses represent |
the only significant mode of use of the product. |
"Installation Information" for a User Product means any methods, |
procedures, authorization keys, or other information required to install |
and execute modified versions of a covered work in that User Product from |
a modified version of its Corresponding Source. The information must |
suffice to ensure that the continued functioning of the modified object |
code is in no case prevented or interfered with solely because |
modification has been made. |
If you convey an object code work under this section in, or with, or |
specifically for use in, a User Product, and the conveying occurs as |
part of a transaction in which the right of possession and use of the |
User Product is transferred to the recipient in perpetuity or for a |
fixed term (regardless of how the transaction is characterized), the |
Corresponding Source conveyed under this section must be accompanied |
by the Installation Information. But this requirement does not apply |
if neither you nor any third party retains the ability to install |
modified object code on the User Product (for example, the work has |
been installed in ROM). |
The requirement to provide Installation Information does not include a |
requirement to continue to provide support service, warranty, or updates |
for a work that has been modified or installed by the recipient, or for |
the User Product in which it has been modified or installed. Access to a |
network may be denied when the modification itself materially and |
adversely affects the operation of the network or violates the rules and |
protocols for communication across the network. |
Corresponding Source conveyed, and Installation Information provided, |
in accord with this section must be in a format that is publicly |
documented (and with an implementation available to the public in |
source code form), and must require no special password or key for |
unpacking, reading or copying. |
7. Additional Terms. |
"Additional permissions" are terms that supplement the terms of this |
License by making exceptions from one or more of its conditions. |
Additional permissions that are applicable to the entire Program shall |
be treated as though they were included in this License, to the extent |
that they are valid under applicable law. If additional permissions |
apply only to part of the Program, that part may be used separately |
under those permissions, but the entire Program remains governed by |
this License without regard to the additional permissions. |
When you convey a copy of a covered work, you may at your option |
remove any additional permissions from that copy, or from any part of |
it. (Additional permissions may be written to require their own |
removal in certain cases when you modify the work.) You may place |
additional permissions on material, added by you to a covered work, |
for which you have or can give appropriate copyright permission. |
Notwithstanding any other provision of this License, for material you |
add to a covered work, you may (if authorized by the copyright holders of |
that material) supplement the terms of this License with terms: |
a) Disclaiming warranty or limiting liability differently from the |
terms of sections 15 and 16 of this License; or |
b) Requiring preservation of specified reasonable legal notices or |
author attributions in that material or in the Appropriate Legal |
Notices displayed by works containing it; or |
c) Prohibiting misrepresentation of the origin of that material, or |
requiring that modified versions of such material be marked in |
reasonable ways as different from the original version; or |
d) Limiting the use for publicity purposes of names of licensors or |
authors of the material; or |
e) Declining to grant rights under trademark law for use of some |
trade names, trademarks, or service marks; or |
f) Requiring indemnification of licensors and authors of that |
material by anyone who conveys the material (or modified versions of |
it) with contractual assumptions of liability to the recipient, for |
any liability that these contractual assumptions directly impose on |
those licensors and authors. |
All other non-permissive additional terms are considered "further |
restrictions" within the meaning of section 10. If the Program as you |
received it, or any part of it, contains a notice stating that it is |
governed by this License along with a term that is a further |
restriction, you may remove that term. If a license document contains |
a further restriction but permits relicensing or conveying under this |
License, you may add to a covered work material governed by the terms |
of that license document, provided that the further restriction does |
not survive such relicensing or conveying. |
If you add terms to a covered work in accord with this section, you |
must place, in the relevant source files, a statement of the |
additional terms that apply to those files, or a notice indicating |
where to find the applicable terms. |
Additional terms, permissive or non-permissive, may be stated in the |
form of a separately written license, or stated as exceptions; |
the above requirements apply either way. |
8. Termination. |
You may not propagate or modify a covered work except as expressly |
provided under this License. Any attempt otherwise to propagate or |
modify it is void, and will automatically terminate your rights under |
this License (including any patent licenses granted under the third |
paragraph of section 11). |
However, if you cease all violation of this License, then your |
license from a particular copyright holder is reinstated (a) |
provisionally, unless and until the copyright holder explicitly and |
finally terminates your license, and (b) permanently, if the copyright |
holder fails to notify you of the violation by some reasonable means |
prior to 60 days after the cessation. |
Moreover, your license from a particular copyright holder is |
reinstated permanently if the copyright holder notifies you of the |
violation by some reasonable means, this is the first time you have |
received notice of violation of this License (for any work) from that |
copyright holder, and you cure the violation prior to 30 days after |
your receipt of the notice. |
Termination of your rights under this section does not terminate the |
licenses of parties who have received copies or rights from you under |
this License. If your rights have been terminated and not permanently |
reinstated, you do not qualify to receive new licenses for the same |
material under section 10. |
9. Acceptance Not Required for Having Copies. |
You are not required to accept this License in order to receive or |
run a copy of the Program. Ancillary propagation of a covered work |
occurring solely as a consequence of using peer-to-peer transmission |
to receive a copy likewise does not require acceptance. However, |
nothing other than this License grants you permission to propagate or |
modify any covered work. These actions infringe copyright if you do |
not accept this License. Therefore, by modifying or propagating a |
covered work, you indicate your acceptance of this License to do so. |
10. Automatic Licensing of Downstream Recipients. |
Each time you convey a covered work, the recipient automatically |
receives a license from the original licensors, to run, modify and |
propagate that work, subject to this License. You are not responsible |
for enforcing compliance by third parties with this License. |
An "entity transaction" is a transaction transferring control of an |
organization, or substantially all assets of one, or subdividing an |
organization, or merging organizations. If propagation of a covered |
work results from an entity transaction, each party to that |
transaction who receives a copy of the work also receives whatever |
licenses to the work the party's predecessor in interest had or could |
give under the previous paragraph, plus a right to possession of the |
Corresponding Source of the work from the predecessor in interest, if |
the predecessor has it or can get it with reasonable efforts. |
You may not impose any further restrictions on the exercise of the |
rights granted or affirmed under this License. For example, you may |
not impose a license fee, royalty, or other charge for exercise of |
rights granted under this License, and you may not initiate litigation |
(including a cross-claim or counterclaim in a lawsuit) alleging that |
any patent claim is infringed by making, using, selling, offering for |
sale, or importing the Program or any portion of it. |
11. Patents. |
A "contributor" is a copyright holder who authorizes use under this |
License of the Program or a work on which the Program is based. The |
work thus licensed is called the contributor's "contributor version". |
A contributor's "essential patent claims" are all patent claims |
owned or controlled by the contributor, whether already acquired or |
hereafter acquired, that would be infringed by some manner, permitted |
by this License, of making, using, or selling its contributor version, |
but do not include claims that would be infringed only as a |
consequence of further modification of the contributor version. For |
purposes of this definition, "control" includes the right to grant |
patent sublicenses in a manner consistent with the requirements of |
this License. |
Each contributor grants you a non-exclusive, worldwide, royalty-free |
patent license under the contributor's essential patent claims, to |
make, use, sell, offer for sale, import and otherwise run, modify and |
propagate the contents of its contributor version. |
In the following three paragraphs, a "patent license" is any express |
agreement or commitment, however denominated, not to enforce a patent |
(such as an express permission to practice a patent or covenant not to |
sue for patent infringement). To "grant" such a patent license to a |
party means to make such an agreement or commitment not to enforce a |
patent against the party. |
If you convey a covered work, knowingly relying on a patent license, |
and the Corresponding Source of the work is not available for anyone |
to copy, free of charge and under the terms of this License, through a |
publicly available network server or other readily accessible means, |
then you must either (1) cause the Corresponding Source to be so |
available, or (2) arrange to deprive yourself of the benefit of the |
patent license for this particular work, or (3) arrange, in a manner |
consistent with the requirements of this License, to extend the patent |
license to downstream recipients. "Knowingly relying" means you have |
actual knowledge that, but for the patent license, your conveying the |
covered work in a country, or your recipient's use of the covered work |
in a country, would infringe one or more identifiable patents in that |
country that you have reason to believe are valid. |
If, pursuant to or in connection with a single transaction or |
arrangement, you convey, or propagate by procuring conveyance of, a |
covered work, and grant a patent license to some of the parties |
receiving the covered work authorizing them to use, propagate, modify |
or convey a specific copy of the covered work, then the patent license |
you grant is automatically extended to all recipients of the covered |
work and works based on it. |
A patent license is "discriminatory" if it does not include within |
the scope of its coverage, prohibits the exercise of, or is |
conditioned on the non-exercise of one or more of the rights that are |
specifically granted under this License. You may not convey a covered |
work if you are a party to an arrangement with a third party that is |
in the business of distributing software, under which you make payment |
to the third party based on the extent of your activity of conveying |
the work, and under which the third party grants, to any of the |
parties who would receive the covered work from you, a discriminatory |
patent license (a) in connection with copies of the covered work |
conveyed by you (or copies made from those copies), or (b) primarily |
for and in connection with specific products or compilations that |
contain the covered work, unless you entered into that arrangement, |
or that patent license was granted, prior to 28 March 2007. |
Nothing in this License shall be construed as excluding or limiting |
any implied license or other defenses to infringement that may |
otherwise be available to you under applicable patent law. |
12. No Surrender of Others' Freedom. |
If conditions are imposed on you (whether by court order, agreement or |
otherwise) that contradict the conditions of this License, they do not |
excuse you from the conditions of this License. If you cannot convey a |
covered work so as to satisfy simultaneously your obligations under this |
License and any other pertinent obligations, then as a consequence you may |
not convey it at all. For example, if you agree to terms that obligate you |
to collect a royalty for further conveying from those to whom you convey |
the Program, the only way you could satisfy both those terms and this |
License would be to refrain entirely from conveying the Program. |
13. Use with the GNU Affero General Public License. |
Notwithstanding any other provision of this License, you have |
permission to link or combine any covered work with a work licensed |
under version 3 of the GNU Affero General Public License into a single |
combined work, and to convey the resulting work. The terms of this |
License will continue to apply to the part which is the covered work, |
but the special requirements of the GNU Affero General Public License, |
section 13, concerning interaction through a network will apply to the |
combination as such. |
14. Revised Versions of this License. |
The Free Software Foundation may publish revised and/or new versions of |
the GNU General Public License from time to time. Such new versions will |
be similar in spirit to the present version, but may differ in detail to |
address new problems or concerns. |
Each version is given a distinguishing version number. If the |
Program specifies that a certain numbered version of the GNU General |
Public License "or any later version" applies to it, you have the |
option of following the terms and conditions either of that numbered |
version or of any later version published by the Free Software |
Foundation. If the Program does not specify a version number of the |
GNU General Public License, you may choose any version ever published |
by the Free Software Foundation. |
If the Program specifies that a proxy can decide which future |
versions of the GNU General Public License can be used, that proxy's |
public statement of acceptance of a version permanently authorizes you |
to choose that version for the Program. |
Later license versions may give you additional or different |
permissions. However, no additional obligations are imposed on any |
author or copyright holder as a result of your choosing to follow a |
later version. |
15. Disclaimer of Warranty. |
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY |
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT |
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY |
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, |
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM |
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF |
ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
16. Limitation of Liability. |
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS |
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY |
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE |
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF |
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD |
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), |
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF |
SUCH DAMAGES. |
17. Interpretation of Sections 15 and 16. |
If the disclaimer of warranty and limitation of liability provided |
above cannot be given local legal effect according to their terms, |
reviewing courts shall apply local law that most closely approximates |
an absolute waiver of all civil liability in connection with the |
Program, unless a warranty or assumption of liability accompanies a |
copy of the Program in return for a fee. |
END OF TERMS AND CONDITIONS |
How to Apply These Terms to Your New Programs |
If you develop a new program, and you want it to be of the greatest |
possible use to the public, the best way to achieve this is to make it |
free software which everyone can redistribute and change under these terms. |
To do so, attach the following notices to the program. It is safest |
to attach them to the start of each source file to most effectively |
state the exclusion of warranty; and each file should have at least |
the "copyright" line and a pointer to where the full notice is found. |
<one line to give the program's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This program 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 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 General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
Also add information on how to contact you by electronic and paper mail. |
If the program does terminal interaction, make it output a short |
notice like this when it starts in an interactive mode: |
<program> Copyright (C) <year> <name of author> |
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
This is free software, and you are welcome to redistribute it |
under certain conditions; type `show c' for details. |
The hypothetical commands `show w' and `show c' should show the appropriate |
parts of the General Public License. Of course, your program's commands |
might be different; for a GUI interface, you would use an "about box". |
You should also get your employer (if you work as a programmer) or school, |
if any, to sign a "copyright disclaimer" for the program, if necessary. |
For more information on this, and how to apply and follow the GNU GPL, see |
<http://www.gnu.org/licenses/>. |
The GNU General Public License does not permit incorporating your program |
into proprietary programs. If your program is a subroutine library, you |
may consider it more useful to permit linking proprietary applications with |
the library. If this is what you want to do, use the GNU Lesser General |
Public License instead of this License. But first, please read |
<http://www.gnu.org/philosophy/why-not-lgpl.html>. |
/branches/v0.60_MicroMag3_Nick666/v0.66c/COPYING.LESSER |
---|
0,0 → 1,165 |
GNU LESSER GENERAL PUBLIC LICENSE |
Version 3, 29 June 2007 |
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> |
Everyone is permitted to copy and distribute verbatim copies |
of this license document, but changing it is not allowed. |
This version of the GNU Lesser General Public License incorporates |
the terms and conditions of version 3 of the GNU General Public |
License, supplemented by the additional permissions listed below. |
0. Additional Definitions. |
As used herein, "this License" refers to version 3 of the GNU Lesser |
General Public License, and the "GNU GPL" refers to version 3 of the GNU |
General Public License. |
"The Library" refers to a covered work governed by this License, |
other than an Application or a Combined Work as defined below. |
An "Application" is any work that makes use of an interface provided |
by the Library, but which is not otherwise based on the Library. |
Defining a subclass of a class defined by the Library is deemed a mode |
of using an interface provided by the Library. |
A "Combined Work" is a work produced by combining or linking an |
Application with the Library. The particular version of the Library |
with which the Combined Work was made is also called the "Linked |
Version". |
The "Minimal Corresponding Source" for a Combined Work means the |
Corresponding Source for the Combined Work, excluding any source code |
for portions of the Combined Work that, considered in isolation, are |
based on the Application, and not on the Linked Version. |
The "Corresponding Application Code" for a Combined Work means the |
object code and/or source code for the Application, including any data |
and utility programs needed for reproducing the Combined Work from the |
Application, but excluding the System Libraries of the Combined Work. |
1. Exception to Section 3 of the GNU GPL. |
You may convey a covered work under sections 3 and 4 of this License |
without being bound by section 3 of the GNU GPL. |
2. Conveying Modified Versions. |
If you modify a copy of the Library, and, in your modifications, a |
facility refers to a function or data to be supplied by an Application |
that uses the facility (other than as an argument passed when the |
facility is invoked), then you may convey a copy of the modified |
version: |
a) under this License, provided that you make a good faith effort to |
ensure that, in the event an Application does not supply the |
function or data, the facility still operates, and performs |
whatever part of its purpose remains meaningful, or |
b) under the GNU GPL, with none of the additional permissions of |
this License applicable to that copy. |
3. Object Code Incorporating Material from Library Header Files. |
The object code form of an Application may incorporate material from |
a header file that is part of the Library. You may convey such object |
code under terms of your choice, provided that, if the incorporated |
material is not limited to numerical parameters, data structure |
layouts and accessors, or small macros, inline functions and templates |
(ten or fewer lines in length), you do both of the following: |
a) Give prominent notice with each copy of the object code that the |
Library is used in it and that the Library and its use are |
covered by this License. |
b) Accompany the object code with a copy of the GNU GPL and this license |
document. |
4. Combined Works. |
You may convey a Combined Work under terms of your choice that, |
taken together, effectively do not restrict modification of the |
portions of the Library contained in the Combined Work and reverse |
engineering for debugging such modifications, if you also do each of |
the following: |
a) Give prominent notice with each copy of the Combined Work that |
the Library is used in it and that the Library and its use are |
covered by this License. |
b) Accompany the Combined Work with a copy of the GNU GPL and this license |
document. |
c) For a Combined Work that displays copyright notices during |
execution, include the copyright notice for the Library among |
these notices, as well as a reference directing the user to the |
copies of the GNU GPL and this license document. |
d) Do one of the following: |
0) Convey the Minimal Corresponding Source under the terms of this |
License, and the Corresponding Application Code in a form |
suitable for, and under terms that permit, the user to |
recombine or relink the Application with a modified version of |
the Linked Version to produce a modified Combined Work, in the |
manner specified by section 6 of the GNU GPL for conveying |
Corresponding Source. |
1) Use a suitable shared library mechanism for linking with the |
Library. A suitable mechanism is one that (a) uses at run time |
a copy of the Library already present on the user's computer |
system, and (b) will operate properly with a modified version |
of the Library that is interface-compatible with the Linked |
Version. |
e) Provide Installation Information, but only if you would otherwise |
be required to provide such information under section 6 of the |
GNU GPL, and only to the extent that such information is |
necessary to install and execute a modified version of the |
Combined Work produced by recombining or relinking the |
Application with a modified version of the Linked Version. (If |
you use option 4d0, the Installation Information must accompany |
the Minimal Corresponding Source and Corresponding Application |
Code. If you use option 4d1, you must provide the Installation |
Information in the manner specified by section 6 of the GNU GPL |
for conveying Corresponding Source.) |
5. Combined Libraries. |
You may place library facilities that are a work based on the |
Library side by side in a single library together with other library |
facilities that are not Applications and are not covered by this |
License, and convey such a combined library under terms of your |
choice, if you do both of the following: |
a) Accompany the combined library with a copy of the same work based |
on the Library, uncombined with any other library facilities, |
conveyed under the terms of this License. |
b) Give prominent notice with the combined library that part of it |
is a work based on the Library, and explaining where to find the |
accompanying uncombined form of the same work. |
6. Revised Versions of the GNU Lesser General Public License. |
The Free Software Foundation may publish revised and/or new versions |
of the GNU Lesser General Public License from time to time. Such new |
versions will be similar in spirit to the present version, but may |
differ in detail to address new problems or concerns. |
Each version is given a distinguishing version number. If the |
Library as you received it specifies that a certain numbered version |
of the GNU Lesser General Public License "or any later version" |
applies to it, you have the option of following the terms and |
conditions either of that published version or of any later version |
published by the Free Software Foundation. If the Library as you |
received it does not specify a version number of the GNU Lesser |
General Public License, you may choose any version of the GNU Lesser |
General Public License ever published by the Free Software Foundation. |
If the Library as you received it specifies that a proxy can decide |
whether future versions of the GNU Lesser General Public License shall |
apply, that proxy's public statement of acceptance of any version is |
permanent authorization for you to choose that version for the |
Library. |
/branches/v0.60_MicroMag3_Nick666/v0.66c/FlightCtrl.aps |
---|
0,0 → 1,0 |
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>11-Oct-2007 22:58:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\MikroKopter\FlightCtrl\branches\V0.64_ZeroWarnings\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>uart.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>timer0.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>fc.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>fc.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>TWIMASTER.C</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>uart.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>analog.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>gps.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>main.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>rc.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>Settings.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>timer0.h</FileName><Status>1</Status></File00018></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio> |
/branches/v0.60_MicroMag3_Nick666/v0.66c/GPS.c |
---|
0,0 → 1,30 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + 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" |
signed int GPS_Nick = 0; |
signed int GPS_Roll = 0; |
long GpsAktuell_X = 0; |
long GpsAktuell_Y = 0; |
long GpsZiel_X = 0; |
long GpsZiel_Y = 0; |
void GPS_Neutral(void) |
{ |
GpsZiel_X = GpsAktuell_X; |
GpsZiel_Y = GpsAktuell_Y; |
} |
void GPS_BerechneZielrichtung(void) |
{ |
GPS_Nick = 0; |
GPS_Roll = 0; |
} |
/branches/v0.60_MicroMag3_Nick666/v0.66c/Settings.h |
---|
--- v0.66c/_Settings.h (nonexistent) |
+++ v0.66c/_Settings.h (revision 438) |
@@ -0,0 +1,50 @@ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Testmodi |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define MOTOR_OFF 0 |
+#define MOTOR_TEST 0 |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Abstimmung |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define ACC_AMPLIFY 12 |
+#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/v0.60_MicroMag3_Nick666/v0.66c/analog.c |
---|
0,0 → 1,145 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + 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 AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0; |
volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 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<<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_Mess(100); |
if(MessLuftdruck < 850) off = 0; |
for(; off < 250;off++) |
{ |
OCR0A = off; |
Delay_ms_Mess(50); |
printf("."); |
if(MessLuftdruck < 900) break; |
} |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off); |
DruckOffsetSetting = off; |
Delay_ms_Mess(300); |
} |
//####################################################################################### |
// |
SIGNAL(SIG_ADC) |
//####################################################################################### |
{ |
static unsigned char kanal=0,state = 0; |
static unsigned int gier1, roll1, nick1; |
ANALOG_OFF; |
switch(state++) |
{ |
case 0: |
gier1 = ADC; |
kanal = 1; |
ZaehlMessungen++; |
break; |
case 1: |
roll1 = ADC; |
kanal = 2; |
break; |
case 2: |
nick1 = ADC; |
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; |
AdWertAccRoll = Aktuell_ay; |
kanal = 7; |
break; |
case 5: |
Aktuell_ax = ADC - NeutralAccX; |
AdWertAccNick = Aktuell_ax; |
kanal = 0; |
break; |
case 6: |
if(PlatinenVersion == 10) AdWertGier = (ADC + gier1) / 2; |
else AdWertGier = ADC + gier1; |
kanal = 1; |
break; |
case 7: |
if(PlatinenVersion == 10) AdWertRoll = (ADC + roll1) / 2; |
else AdWertRoll = ADC + roll1; |
kanal = 2; |
break; |
case 8: |
if(PlatinenVersion == 10) AdWertNick = (ADC + nick1) / 2; |
else AdWertNick = ADC + nick1; |
kanal = 5; |
break; |
case 9: |
AdWertAccHoch = (signed int) ADC - NeutralAccZ; |
AdWertAccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4; |
if(AdWertAccHoch > 1) |
{ |
if(NeutralAccZ < 800) NeutralAccZ+= 0.02; |
} |
else if(AdWertAccHoch < -1) |
{ |
if(NeutralAccZ > 600) NeutralAccZ-= 0.02; |
} |
messanzahl_AccHoch = 1; |
Aktuell_az = ADC; |
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
kanal = 3; |
break; |
case 10: |
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; |
if(state != 0) ANALOG_ON; |
} |
/branches/v0.60_MicroMag3_Nick666/v0.66c/analog.h |
---|
0,0 → 1,24 |
/*####################################################################################### |
#######################################################################################*/ |
extern volatile int UBat; |
extern volatile int AdWertNick, AdWertRoll, AdWertGier; |
extern volatile int AdWertAccRoll,AdWertAccNick,AdWertAccHoch; |
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 volatile char MessanzahlNick; |
unsigned int ReadADC(unsigned char adc_input); |
void ADC_Init(void); |
void SucheLuftruckOffset(void); |
#define ANALOG_OFF ADCSRA=0 |
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE) |
/branches/v0.60_MicroMag3_Nick666/v0.66c/compass.c |
---|
0,0 → 1,244 |
/* |
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" |
struct MM3_calib_struct ee_calib EEMEM; // Reservierung im EEPROM |
struct MM3_working_struct MM3; |
struct MM3_calib_struct MM3_calib; |
//############################################################################ |
// Initialisierung |
void init_MM3(void) |
//############################################################################ |
{ |
SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<SPR1); //Interrupt an, Master, 625 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 |
eeprom_read_block(&MM3_calib,&ee_calib,sizeof(struct MM3_calib_struct)); |
} |
//############################################################################ |
// Wird in der SIGNAL (SIG_OVERFLOW0) aufgerufen |
void timer0_MM3(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(5); // 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) |
} |
} |
//############################################################################ |
// SPI byte ready |
SIGNAL (SIG_SPI) |
//############################################################################ |
{ |
static char tmp; |
int wert; |
switch (MM3.STATE) |
{ |
case MM3_DRDY: // 1. Byte ist da, zwischenspeichern |
tmp = SPDR; |
SPDR = 0x00; // Übertragung von 2. Byte auslösen |
MM3.STATE = MM3_BYTE2; |
return; |
case MM3_BYTE2: // 2. Byte der entsprechenden Achse ist da |
wert = tmp; |
wert <<= 8; // 1. Byte an MSB-Stelle rücken |
wert |= SPDR; // 2. Byte dranpappen |
if(abs(wert) < Max_Axis_Value) // Spikes filtern. Zuweisung nur, wenn Max-Wert nicht überschritten |
switch (MM3.AXIS) |
{ |
case MM3_X: |
MM3.x_axis = wert; |
MM3.AXIS = MM3_Y; |
break; |
case MM3_Y: |
MM3.y_axis = wert; |
MM3.AXIS = MM3_Z; |
break; |
default: //case MM3_Z: |
MM3.z_axis = wert; |
MM3.AXIS = MM3_X; |
} |
MM3.STATE = MM3_RESET; |
} |
} |
//############################################################################ |
// Kompass kalibrieren |
void calib_MM3(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; |
GRN_ON; |
ROT_OFF; |
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) |
{ |
ROT_FLASH; |
GRN_FLASH; |
beeptime = 50; |
beeper = 50; |
} |
beeper--; |
// Schleife mit 100 Hz |
timer = SetDelay(10); |
while(!CheckDelay(timer)); |
// Wenn Gas zurück genommen wird, Kalibrierung mit 1/2 Sekunde Verzögerung beenden |
if (PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < 100) measurement--; |
} |
// Wertebereich der Achsen |
MM3_calib.X_range = (x_max - x_min); |
MM3_calib.Y_range = (y_max - y_min); |
MM3_calib.Z_range = (z_max - z_min); |
// Offset der Achsen |
MM3_calib.X_off = (x_max + x_min) / 2; |
MM3_calib.Y_off = (y_max + y_min) / 2; |
MM3_calib.Z_off = (z_max + z_min) / 2; |
// und im EEProm abspeichern |
eeprom_write_block(&MM3_calib,&ee_calib,sizeof(struct MM3_calib_struct)); |
} |
//############################################################################ |
// Neigungskompensierung und Berechnung der Ausrichtung |
signed int heading_MM3(void) |
//############################################################################ |
{ |
float sin_nick, cos_nick, sin_roll, cos_roll; |
float x_corr, y_corr; |
signed int x_axis,y_axis,z_axis, heading; |
unsigned int div_faktor; |
div_faktor = (uint16_t)EE_Parameter.UserParam1 * 8; |
// Berechung von sinus und cosinus |
MM3.NickGrad = (IntegralNick/div_faktor); |
//MM3.NickGrad = asin_i(MM3.NickGrad); |
sin_nick = sin_f(MM3.NickGrad); |
cos_nick = cos_f(MM3.NickGrad); |
MM3.RollGrad = (IntegralRoll/div_faktor); |
//MM3.RollGrad = asin_i(MM3.RollGrad); |
sin_roll = sin_f(MM3.RollGrad); |
cos_roll = cos_f(MM3.RollGrad); |
// Offset |
x_axis = (MM3.x_axis - MM3_calib.X_off); |
y_axis = (MM3.y_axis - MM3_calib.Y_off); |
z_axis = (MM3.z_axis - MM3_calib.Z_off); |
// Normierung Wertebereich |
if ((MM3_calib.X_range > MM3_calib.Y_range) && (MM3_calib.X_range > MM3_calib.Z_range)) |
{ |
y_axis = ((long)y_axis * MM3_calib.X_range) / MM3_calib.Y_range; |
z_axis = ((long)z_axis * MM3_calib.X_range) / MM3_calib.Z_range; |
} |
else if ((MM3_calib.Y_range > MM3_calib.X_range) && (MM3_calib.Y_range > MM3_calib.Z_range)) |
{ |
x_axis = ((long)x_axis * MM3_calib.Y_range) / MM3_calib.X_range; |
z_axis = ((long)z_axis * MM3_calib.Y_range) / MM3_calib.Z_range; |
} |
else //if ((MM3_calib.Z_range > MM3_calib.X_range) && (MM3_calib.Z_range > MM3_calib.Y_range)) |
{ |
x_axis = ((long)x_axis * MM3_calib.Z_range) / MM3_calib.X_range; |
y_axis = ((long)y_axis * MM3_calib.Z_range) / MM3_calib.Y_range; |
} |
DebugOut.Analog[9] = x_axis; |
DebugOut.Analog[10] = y_axis; |
DebugOut.Analog[11] = z_axis; |
// Neigungskompensation |
x_corr = x_axis * cos_nick; |
x_corr += y_axis * sin_roll * sin_nick; |
x_corr -= z_axis * cos_roll * sin_nick; |
y_corr = y_axis * cos_roll; |
y_corr += z_axis * sin_roll; |
// Winkelberechnung |
heading = atan2_i(x_corr, y_corr); |
if (heading < 0) heading = -heading; |
else heading = 360 - heading; |
/* |
if (!x_corr && y_corr <0) return (90); |
if (!x_corr && y_corr >0) return (270); |
heading = atan(y_corr/x_corr)*57.29578; |
if (x_corr < 0) heading = 180-heading; |
if (x_corr > 0 && y_corr < 0) heading = -heading; |
if (x_corr > 0 && y_corr > 0) heading = 360 - heading; |
*/ |
return (heading); |
} |
/branches/v0.60_MicroMag3_Nick666/v0.66c/compass.h |
---|
0,0 → 1,46 |
struct MM3_working_struct |
{ |
uint8_t STATE; |
unsigned int DRDY; |
uint8_t AXIS; |
signed int x_axis; |
signed int y_axis; |
signed int z_axis; |
signed int NickGrad; |
signed int RollGrad; |
}; |
struct MM3_calib_struct |
{ |
int8_t X_off; |
int8_t Y_off; |
int8_t Z_off; |
uint16_t X_range; |
uint16_t Y_range; |
uint16_t Z_range; |
}; |
extern struct MM3_working_struct MM3; |
extern struct MM3_calib_struct MM3_calib; |
void init_MM3(void); |
void timer0_MM3(void); |
void calib_MM3(void); |
signed int heading_MM3(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 3 |
#define MM3_BYTE2 4 |
#define MM3_X 5 |
#define MM3_Y 6 |
#define MM3_Z 7 |
#define MM3_TILT 8 |
#define MM3_IDLE 9 |
/branches/v0.60_MicroMag3_Nick666/v0.66c/eeprom.c |
---|
0,0 → 1,165 |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + 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 = CFG_ACHSENKOPPLUNG_AKTIV;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01; |
EE_Parameter.Hoehe_MinGas = 30; |
EE_Parameter.MaxHoehe = 251; // Wert : 0-250 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 = 14; // Wert : 1-20 |
EE_Parameter.Gas_Min = 15; // Wert : 0-32 |
EE_Parameter.Gas_Max = 250; // Wert : 33-250 |
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64 |
EE_Parameter.KompassWirkung = 128; // Wert : 0-250 |
EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250 |
EE_Parameter.Gyro_I = 150; // Wert : 0-250 |
EE_Parameter.UnterspannungsWarnung = 94; // Wert : 0-250 |
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 = 178; //zur freien Verwendung |
EE_Parameter.UserParam2 = 0; //zur freien Verwendung |
EE_Parameter.UserParam3 = 0; //zur freien Verwendung |
EE_Parameter.UserParam4 = 0; //zur freien Verwendung |
EE_Parameter.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.LoopHysterese = 50; |
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
EE_Parameter.AchsKopplung1 = 100; |
EE_Parameter.AchsGegenKopplung1 = 70; |
EE_Parameter.WinkelUmschlagNick = 100; |
EE_Parameter.WinkelUmschlagRoll = 100; |
EE_Parameter.GyroAccAbgleich = 10; // 1/k |
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 = CFG_ACHSENKOPPLUNG_AKTIV;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01; |
EE_Parameter.Hoehe_MinGas = 30; |
EE_Parameter.MaxHoehe = 251; // Wert : 0-250 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 = 10; // Wert : 1-20 |
EE_Parameter.Gas_Min = 15; // Wert : 0-32 |
EE_Parameter.Gas_Max = 250; // Wert : 33-250 |
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64 |
EE_Parameter.KompassWirkung = 128; // Wert : 0-250 |
EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250 |
EE_Parameter.Gyro_I = 175; // Wert : 0-250 |
EE_Parameter.UnterspannungsWarnung = 94; // Wert : 0-250 |
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 = 178; // zur freien Verwendung |
EE_Parameter.UserParam2 = 0; // zur freien Verwendung |
EE_Parameter.UserParam3 = 0; // zur freien Verwendung |
EE_Parameter.UserParam4 = 0; // zur freien Verwendung |
EE_Parameter.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.LoopHysterese = 50; |
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts |
EE_Parameter.AchsKopplung1 = 100; // Faktor, mit dem Gier die Achsen Roll und Nick verkoppelt |
EE_Parameter.AchsGegenKopplung1 = 80; |
EE_Parameter.WinkelUmschlagNick = 100; |
EE_Parameter.WinkelUmschlagRoll = 100; |
EE_Parameter.GyroAccAbgleich = 16; // 1/k |
memcpy(EE_Parameter.Name, "Kamera\0", 12); |
} |
void DefaultKonstanten3(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 = CFG_HOEHENREGELUNG | CFG_DREHRATEN_BEGRENZER | CFG_ACHSENKOPPLUNG_AKTIV;///*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01; |
EE_Parameter.Hoehe_MinGas = 30; |
EE_Parameter.MaxHoehe = 100; // Wert : 0-250 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 = 3; //2 // Wert : 1-6 |
EE_Parameter.Stick_D = 0; //8 // Wert : 0-64 |
EE_Parameter.Gier_P = 8; // Wert : 1-20 |
EE_Parameter.Gas_Min = 15; // Wert : 0-32 |
EE_Parameter.Gas_Max = 250; // Wert : 33-250 |
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64 |
EE_Parameter.KompassWirkung = 128; // Wert : 0-250 |
EE_Parameter.Gyro_P = 200; //80 // Wert : 0-250 |
EE_Parameter.Gyro_I = 175; // Wert : 0-250 |
EE_Parameter.UnterspannungsWarnung = 94; // Wert : 0-250 |
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 = 178; // zur freien Verwendung |
EE_Parameter.UserParam2 = 0; // zur freien Verwendung |
EE_Parameter.UserParam3 = 0; // zur freien Verwendung |
EE_Parameter.UserParam4 = 0; // zur freien Verwendung |
EE_Parameter.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.LoopHysterese = 50; |
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts |
EE_Parameter.AchsKopplung1 = 100; // Faktor, mit dem Gier die Achsen Roll und Nick verkoppelt |
EE_Parameter.AchsGegenKopplung1 = 80; |
EE_Parameter.WinkelUmschlagNick = 100; |
EE_Parameter.WinkelUmschlagRoll = 100; |
EE_Parameter.GyroAccAbgleich = 16; // 1/k |
memcpy(EE_Parameter.Name, "Beginner\0", 12); |
} |
/branches/v0.60_MicroMag3_Nick666/v0.66c/eeprom.d |
---|
0,0 → 1,0 |
eeprom.o eeprom.d : eeprom.c |
/branches/v0.60_MicroMag3_Nick666/v0.66c/eeprom.h |
---|
--- v0.66c/fc.c (nonexistent) |
+++ v0.66c/fc.c (revision 438) |
@@ -0,0 +1,1031 @@ |
+/*####################################################################################### |
+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" |
+#include "eeprom.c" |
+ |
+unsigned char h,m,s; |
+volatile unsigned int I2CTimeout = 100; |
+volatile int MesswertNick,MesswertRoll,MesswertGier; |
+volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 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 IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 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 MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2; |
+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; |
+long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L; |
+ |
+float GyroFaktor; |
+float IntegralFaktor; |
+ |
+volatile int DiffNick,DiffRoll; |
+int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0; |
+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; |
+int I_LageRoll = 0,I_LageNick = 0; |
+float Kp = FAKTOR_P; |
+float Ki = FAKTOR_I; |
+unsigned char Looping_Nick = 0,Looping_Roll = 0; |
+unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
+ |
+unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
+unsigned char Parameter_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; |
+unsigned char Parameter_AchsKopplung1 = 0; |
+unsigned char Parameter_AchsGegenKopplung1 = 0; |
+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) |
+//############################################################################ |
+{ |
+ NeutralAccX = 0; |
+ NeutralAccY = 0; |
+ NeutralAccZ = 0; |
+ AdNeutralNick = 0; |
+ AdNeutralRoll = 0; |
+ AdNeutralGier = 0; |
+ Parameter_AchsKopplung1 = 0; |
+ Parameter_AchsGegenKopplung1 = 0; |
+ CalibrierMittelwert(); |
+ Delay_ms_Mess(100); |
+ CalibrierMittelwert(); |
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
+ { |
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
+ } |
+ |
+ AdNeutralNick= AdWertNick; |
+ AdNeutralRoll= AdWertRoll; |
+ AdNeutralGier= AdWertGier; |
+ StartNeutralRoll = AdNeutralRoll; |
+ StartNeutralNick = AdNeutralNick; |
+ 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; |
+ GPS_Neutral(); |
+ beeptime = 50; |
+ Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
+ Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
+} |
+ |
+//############################################################################ |
+// Bearbeitet die Messwerte |
+void Mittelwert(void) |
+//############################################################################ |
+{ |
+ static signed long tmpl,tmpl2; |
+ MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
+ MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll; |
+ MesswertNick = (signed int) AdWertNick - AdNeutralNick; |
+ |
+// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
+ Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
+ Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L; |
+ Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
+ IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
+ IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
+ IntegralAccZ += Aktuell_az - 704;//NeutralAccZ; |
+// Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
+ Mess_Integral_Gier += MesswertGier; |
+ Mess_Integral_Gier2 += MesswertGier; |
+// Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
+ if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
+ { |
+ tmpl = Mess_IntegralNick / 4096L; |
+ tmpl *= MesswertGier; |
+ tmpl *= Parameter_AchsKopplung1; //125 |
+ tmpl /= 2048L; |
+ tmpl2 = Mess_IntegralRoll / 4096L; |
+ tmpl2 *= MesswertGier; |
+ tmpl2 *= Parameter_AchsKopplung1; |
+ tmpl2 /= 2048L; |
+ } |
+ else tmpl = tmpl2 = 0; |
+// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
+ MesswertRoll += tmpl; |
+ MesswertRoll += (tmpl2*Parameter_AchsGegenKopplung1)/512L; //109 |
+ Mess_IntegralRoll2 += MesswertRoll; |
+ Mess_IntegralRoll += MesswertRoll - I_LageRoll; |
+ if(Mess_IntegralRoll > Umschlag180Roll) |
+ { |
+ Mess_IntegralRoll = -(Umschlag180Roll - 10000L); |
+ Mess_IntegralRoll2 = Mess_IntegralRoll; |
+ } |
+ if(Mess_IntegralRoll <-Umschlag180Roll) |
+ { |
+ Mess_IntegralRoll = (Umschlag180Roll - 10000L); |
+ Mess_IntegralRoll2 = Mess_IntegralRoll; |
+ } |
+ if(AdWertRoll < 15) MesswertRoll = -1000; |
+ if(AdWertRoll < 7) MesswertRoll = -2000; |
+ if(PlatinenVersion == 10) |
+ { |
+ if(AdWertRoll > 1010) MesswertRoll = +1000; |
+ if(AdWertRoll > 1017) MesswertRoll = +2000; |
+ } |
+ else |
+ { |
+ if(AdWertRoll > 2020) MesswertRoll = +1000; |
+ if(AdWertRoll > 2034) MesswertRoll = +2000; |
+ } |
+// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
+ MesswertNick -= tmpl2; |
+ MesswertNick -= (tmpl*Parameter_AchsGegenKopplung1)/512L; |
+ Mess_IntegralNick2 += MesswertNick; |
+ Mess_IntegralNick += MesswertNick - I_LageNick; |
+ if(Mess_IntegralNick > Umschlag180Nick) |
+ { |
+ Mess_IntegralNick = -(Umschlag180Nick - 10000L); |
+ Mess_IntegralNick2 = Mess_IntegralNick; |
+ } |
+ if(Mess_IntegralNick <-Umschlag180Nick) |
+ { |
+ Mess_IntegralNick = (Umschlag180Nick - 10000L); |
+ Mess_IntegralNick2 = Mess_IntegralNick; |
+ } |
+ if(AdWertNick < 15) MesswertNick = -1000; |
+ if(AdWertNick < 7) MesswertNick = -2000; |
+ if(PlatinenVersion == 10) |
+ { |
+ if(AdWertNick > 1010) MesswertNick = +1000; |
+ if(AdWertNick > 1017) MesswertNick = +2000; |
+ } |
+ else |
+ { |
+ if(AdWertNick > 2020) MesswertNick = +1000; |
+ if(AdWertNick > 2034) MesswertNick = +2000; |
+ } |
+//++++++++++++++++++++++++++++++++++++++++++++++++ |
+// ADC einschalten |
+ ANALOG_ON; |
+//++++++++++++++++++++++++++++++++++++++++++++++++ |
+DebugOut.Analog[11] = MesswertRoll; |
+ |
+ Integral_Gier = Mess_Integral_Gier; |
+ IntegralNick = Mess_IntegralNick; |
+ IntegralRoll = Mess_IntegralRoll; |
+ IntegralNick2 = Mess_IntegralNick2; |
+ IntegralRoll2 = Mess_IntegralRoll2; |
+ |
+ if(EE_Parameter.GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll) |
+ { |
+ 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--; |
+ 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; |
+} |
+ |
+//############################################################################ |
+// Messwerte beim Ermitteln der Nullage |
+void CalibrierMittelwert(void) |
+//############################################################################ |
+{ |
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern |
+ ANALOG_OFF; |
+ MesswertNick = AdWertNick; |
+ MesswertRoll = AdWertRoll; |
+ MesswertGier = AdWertGier; |
+ Mittelwert_AccNick = ACC_AMPLIFY * (long)AdWertAccNick; |
+ Mittelwert_AccRoll = ACC_AMPLIFY * (long)AdWertAccRoll; |
+ Mittelwert_AccHoch = (long)AdWertAccHoch; |
+ // 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--; |
+ 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; |
+ |
+ Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
+ Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
+} |
+ |
+//############################################################################ |
+// 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; |
+ |
+ //Start I2C Interrupt Mode |
+ twi_state = 0; |
+ motor = 0; |
+ i2c_start(); |
+} |
+ |
+ |
+ |
+//############################################################################ |
+// 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_LoopGasLimit,EE_Parameter.LoopGasLimit,0,255); |
+ CHK_POTI(Parameter_AchsKopplung1, EE_Parameter.AchsKopplung1,0,255); |
+ CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,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; |
+ static long IntegralFehlerNick = 0; |
+ static long IntegralFehlerRoll = 0; |
+ static unsigned int RcLostTimer; |
+ static unsigned char delay_neutral = 0; |
+ static unsigned char delay_einschalten = 0,delay_ausschalten = 0; |
+ static unsigned int modell_fliegt = 0; |
+ static int hoehenregler = 0; |
+ static char TimerWerteausgabe = 0; |
+ static char NeueKompassRichtungMerken = 0; |
+ static long ausgleichNick, ausgleichRoll; |
+ |
+ 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++; |
+ } |
+ 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 |
+ { |
+ 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) |
+ { |
+ unsigned char setting=1; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5; |
+ 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; |
+ } |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Looping? |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_LINKS) Looping_Links = 1; |
+ else |
+ { |
+ { |
+ if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Links = 0; |
+ } |
+ } |
+ if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_RECHTS) Looping_Rechts = 1; |
+ else |
+ { |
+ if(Looping_Rechts) // Hysterese |
+ { |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Rechts = 0; |
+ } |
+ } |
+ |
+ if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_OBEN) Looping_Oben = 1; |
+ else |
+ { |
+ if(Looping_Oben) // Hysterese |
+ { |
+ if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Oben = 0; |
+ } |
+ } |
+ if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_UNTEN) Looping_Unten = 1; |
+ else |
+ { |
+ if(Looping_Unten) // Hysterese |
+ { |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Unten = 0; |
+ } |
+ } |
+ |
+ if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0; |
+ if(Looping_Oben || Looping_Unten) {Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0; |
+ } // Ende neue Funken-Werte |
+ |
+ if(Looping_Roll) beeptime = 100; |
+ if(Looping_Roll || Looping_Nick) |
+ { |
+ if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit; |
+ } |
+ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Bei Empfangsausfall im Flug |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(Notlandung) |
+ { |
+ StickGier = 0; |
+ StickNick = 0; |
+ StickRoll = 0; |
+ GyroFaktor = 0.1; |
+ IntegralFaktor = 0.005; |
+ Looping_Roll = 0; |
+ Looping_Nick = 0; |
+ } |
+ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Integrale auf ACC-Signal abgleichen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define ABGLEICH_ANZAHL 256L |
+ |
+ MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
+ MittelIntegralRoll += IntegralRoll; |
+ MittelIntegralNick2 += IntegralNick2; |
+ MittelIntegralRoll2 += IntegralRoll2; |
+ |
+ if(Looping_Nick || Looping_Roll) |
+ { |
+ IntegralAccNick = 0; |
+ IntegralAccRoll = 0; |
+ MittelIntegralNick = 0; |
+ MittelIntegralRoll = 0; |
+ MittelIntegralNick2 = 0; |
+ MittelIntegralRoll2 = 0; |
+ Mess_IntegralNick2 = Mess_IntegralNick; |
+ Mess_IntegralRoll2 = Mess_IntegralRoll; |
+ ZaehlMessungen = 0; |
+ I_LageNick = 0; |
+ I_LageRoll = 0; |
+ } |
+ |
+ if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
+ { |
+ static int cnt = 0; |
+ static char last_n_p,last_n_n,last_r_p,last_r_n; |
+ static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
+ if(!Looping_Nick && !Looping_Roll) |
+ { |
+ MittelIntegralNick /= ABGLEICH_ANZAHL; |
+ MittelIntegralRoll /= ABGLEICH_ANZAHL; |
+ IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
+ IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
+ IntegralAccZ = IntegralAccZ / ABGLEICH_ANZAHL; |
+#define MAX_I 32 |
+// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
+ IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick); |
+ ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich; |
+ if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < 5000) |
+ { |
+ tmp_long = IntegralFehlerNick / 700L; |
+ if(tmp_long > MAX_I) tmp_long = MAX_I; |
+ if(tmp_long <-MAX_I) tmp_long =-MAX_I; |
+ I_LageNick = tmp_long; |
+ } |
+ else |
+ { |
+ I_LageNick /= 2; |
+ } |
+// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
+ IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll); |
+ ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich; |
+ if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < 5000) |
+ { |
+ tmp_long2 = IntegralFehlerRoll / 700L; |
+ if(tmp_long2 > MAX_I) tmp_long2 = MAX_I; |
+ if(tmp_long2 <-MAX_I) tmp_long2 =-MAX_I; |
+ I_LageRoll = tmp_long2; |
+ } |
+ else |
+ { |
+ I_LageRoll /=2; |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ MittelIntegralNick_Alt = MittelIntegralNick; |
+ MittelIntegralRoll_Alt = MittelIntegralRoll; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ Mess_IntegralNick -= ausgleichNick; |
+ Mess_IntegralRoll -= ausgleichRoll; |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gyro-Drift ermitteln |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ MittelIntegralNick2 /= ABGLEICH_ANZAHL; |
+ MittelIntegralRoll2 /= ABGLEICH_ANZAHL; |
+ tmp_long = (long)(MittelIntegralNick2 - (long)IntegralAccNick); |
+ tmp_long2 = (long)(MittelIntegralRoll2 - (long)IntegralAccRoll); |
+ //DebugOut.Analog[25] = MittelIntegralRoll2 / 26; |
+ |
+ IntegralFehlerNick = tmp_long; |
+ IntegralFehlerRoll = tmp_long2; |
+ Mess_IntegralNick2 -= IntegralFehlerNick; |
+ Mess_IntegralRoll2 -= IntegralFehlerRoll; |
+ |
+// IntegralFehlerNick = (IntegralFehlerNick * 1 + tmp_long) / 2; |
+// IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2; |
+ |
+ |
+DebugOut.Analog[30] = I_LageRoll * 10; |
+DebugOut.Analog[17] = IntegralAccNick / 26; |
+DebugOut.Analog[18] = IntegralAccRoll / 26; |
+DebugOut.Analog[19] = IntegralFehlerNick;// / 26; |
+DebugOut.Analog[20] = IntegralFehlerRoll;// / 26; |
+DebugOut.Analog[21] = MittelIntegralNick / 26; |
+DebugOut.Analog[22] = MittelIntegralRoll / 26; |
+DebugOut.Analog[28] = ausgleichNick; |
+DebugOut.Analog[29] = ausgleichRoll; |
+ |
+#define FEHLER_LIMIT (ABGLEICH_ANZAHL/2) |
+#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL*4) |
+ |
+// Nick +++++++++++++++++++++++++++++++++++++++++++++++++ |
+ cnt = 1;// + labs(IntegralFehlerNick) / 4096; |
+ if(IntegralFehlerNick > FEHLER_LIMIT2) |
+ { |
+ if(last_n_p) |
+ { |
+ cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2; |
+ ausgleichNick = IntegralFehlerNick / 8; |
+ if(ausgleichNick > 5000) ausgleichNick = 5000; |
+ Mess_IntegralNick -= ausgleichNick; |
+ } |
+ else last_n_p = 1; |
+ } else last_n_p = 0; |
+ if(IntegralFehlerNick < -FEHLER_LIMIT2) |
+ { |
+ if(last_n_n) |
+ { |
+ cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2; |
+ ausgleichNick = IntegralFehlerNick / 8; |
+ if(ausgleichNick < -5000) ausgleichNick = -5000; |
+ Mess_IntegralNick -= ausgleichNick; |
+ } |
+ else last_n_n = 1; |
+ } else last_n_n = 0; |
+ |
+ if(cnt > 3) cnt = 3; |
+ if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
+ if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
+ |
+// Roll +++++++++++++++++++++++++++++++++++++++++++++++++ |
+ cnt = 1;// + labs(IntegralFehlerRoll) / 4096; |
+ausgleichRoll = 0; |
+ if(IntegralFehlerRoll > FEHLER_LIMIT2) |
+ { |
+ if(last_r_p) |
+ { |
+ cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2; |
+ ausgleichRoll = IntegralFehlerRoll / 4; |
+ if(ausgleichRoll > 5000) ausgleichRoll = 5000; |
+ Mess_IntegralRoll -= ausgleichRoll; |
+ } |
+ else last_r_p = 1; |
+ } else last_r_p = 0; |
+ if(IntegralFehlerRoll < -FEHLER_LIMIT2) |
+ { |
+ if(last_r_n) |
+ { |
+ cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2; |
+ ausgleichRoll = IntegralFehlerRoll / 4; |
+ if(ausgleichRoll < -5000) ausgleichRoll = -5000; |
+ Mess_IntegralRoll -= ausgleichRoll; |
+ } |
+ else last_r_n = 1; |
+ } else last_r_n = 0; |
+ |
+DebugOut.Analog[27] = ausgleichRoll; |
+ if(cnt > 3) cnt = 3; |
+ if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt; |
+ if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt; |
+DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll); |
+ } |
+ IntegralAccNick = 0; |
+ IntegralAccRoll = 0; |
+ IntegralAccZ = 0; |
+ MittelIntegralNick = 0; |
+ MittelIntegralRoll = 0; |
+ MittelIntegralNick2 = 0; |
+ MittelIntegralRoll2 = 0; |
+ ZaehlMessungen = 0; |
+ } |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gieren |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(abs(StickGier) > 20) // war 35 |
+ { |
+ if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1; |
+ } |
+ tmp_int = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx² |
+ tmp_int += (EE_Parameter.Gier_P * StickGier) / 4; |
+ sollGier = tmp_int; |
+ Mess_Integral_Gier -= tmp_int; |
+ if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen |
+ if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Kompass |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) |
+ { |
+ int w,v; |
+ static int SignalSchlecht = 0; |
+ w = abs(IntegralNick /1024); // mit zunehmender Neigung den Einfluss drosseln |
+ v = abs(IntegralRoll /1024); |
+ if(v > w) w = v; // grösste Neigung ermitteln |
+ if(w < 35 && 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) |
+ { |
+ if(!SignalSchlecht) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten |
+ if(SignalSchlecht) SignalSchlecht--; |
+ } |
+ else SignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Debugwerte zuordnen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(!TimerWerteausgabe--) |
+ { |
+ TimerWerteausgabe = 24; |
+ DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor; |
+ DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor; |
+ DebugOut.Analog[2] = Mittelwert_AccNick; |
+ DebugOut.Analog[3] = Mittelwert_AccRoll; |
+ DebugOut.Analog[4] = MesswertGier; |
+ DebugOut.Analog[5] = HoehenWert; |
+ DebugOut.Analog[6] =(Mess_Integral_Hoch / 512); |
+ DebugOut.Analog[8] = KompassValue; |
+ DebugOut.Analog[9] = UBat; |
+ DebugOut.Analog[10] = SenderOkay; |
+ DebugOut.Analog[16] = Mittelwert_AccHoch; |
+ |
+/* DebugOut.Analog[16] = motor_rx[0]; |
+ DebugOut.Analog[17] = motor_rx[1]; |
+ DebugOut.Analog[18] = motor_rx[2]; |
+ DebugOut.Analog[19] = motor_rx[3]; |
+ DebugOut.Analog[20] = motor_rx[0] + motor_rx[1] + motor_rx[2] + motor_rx[3]; |
+ DebugOut.Analog[20] /= 14; |
+ DebugOut.Analog[21] = motor_rx[4]; |
+ DebugOut.Analog[22] = motor_rx[5]; |
+ DebugOut.Analog[23] = motor_rx[6]; |
+ DebugOut.Analog[24] = motor_rx[7]; |
+ DebugOut.Analog[25] = motor_rx[4] + motor_rx[5] + motor_rx[6] + motor_rx[7]; |
+*/ |
+// DebugOut.Analog[9] = MesswertNick; |
+// DebugOut.Analog[9] = SollHoehe; |
+// DebugOut.Analog[10] = Mess_Integral_Gier / 128; |
+// DebugOut.Analog[11] = KompassStartwert; |
+// DebugOut.Analog[10] = Parameter_Gyro_I; |
+// DebugOut.Analog[10] = EE_Parameter.Gyro_I; |
+// DebugOut.Analog[9] = KompassRichtung; |
+// DebugOut.Analog[10] = GasMischanteil; |
+// DebugOut.Analog[3] = HoeheD * 32; |
+// DebugOut.Analog[4] = hoehenregler; |
+ } |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// 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 - 20; // Parameter_MaxHoehe ist der PPM-Wert des Schalters |
+ HoehenReglerAktiv = 0; |
+ } |
+ else |
+ HoehenReglerAktiv = 1; |
+ } |
+ else |
+ { |
+ SollHoehe = Parameter_MaxHoehe * EE_Parameter.Hoehe_Verstaerkung - 20; |
+ 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/v0.60_MicroMag3_Nick666/v0.66c/fc.h |
---|
0,0 → 1,137 |
/*####################################################################################### |
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 IntegralAccNick,IntegralAccRoll; |
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 long Umschlag180Nick, Umschlag180Roll; |
void MotorRegler(void); |
void SendMotorData(void); |
void CalibrierMittelwert(void); |
void Mittelwert(void); |
void SetNeutral(void); |
void Piep(unsigned char Anzahl); |
extern void DefaultKonstanten(void); |
void DefaultKonstanten1(void); |
void DefaultKonstanten2(void); |
extern unsigned char h,m,s; |
extern volatile unsigned char Timeout ; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern volatile long IntegralNick,IntegralNick2; |
extern volatile long IntegralRoll,IntegralRoll2; |
extern volatile long Integral_Gier; |
extern volatile long Mess_IntegralNick,Mess_IntegralNick2; |
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2; |
extern volatile long Mess_Integral_Gier; |
extern volatile int DiffNick,DiffRoll; |
extern int Poti1, Poti2, Poti3, Poti4; |
extern volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
extern unsigned char MotorWert[5]; |
extern volatile unsigned char SenderOkay; |
extern int StickNick,StickRoll,StickGier; |
extern char MotorenEin; |
extern void DefaultKonstanten1(void); |
extern void DefaultKonstanten2(void); |
#define STRUCT_PARAM_LAENGE 65 |
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 LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag |
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung) |
unsigned char AchsGegenKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick Gegenkoppelt (NickRollGegenkopplung) |
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt |
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt |
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung) |
unsigned char Driftkomp; |
//------------------------------------------------ |
unsigned char 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; |
extern unsigned char Parameter_AchsKopplung1; |
extern unsigned char Parameter_AchsGegenKopplung1; |
#endif //_FC_H |
/branches/v0.60_MicroMag3_Nick666/v0.66c/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_buss.txt"></File><File path="mymath.c"></File><File path="mymath.h"></File><File path="compass.c"></File><File path="compass.h"></File><File path="COPYING"></File><File path="COPYING.LESSER"></File><File path="eeprom.c"></File><File path="eeprom.h"></File></Project> |
/branches/v0.60_MicroMag3_Nick666/v0.66c/flight.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd> |
/branches/v0.60_MicroMag3_Nick666/v0.66c/gps.h |
---|
0,0 → 1,14 |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Roll; |
void GPS_Neutral(void); |
void GPS_BerechneZielrichtung(void); |
/branches/v0.60_MicroMag3_Nick666/v0.66c/license_buss.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/v0.60_MicroMag3_Nick666/v0.66c/main.c |
---|
0,0 → 1,256 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + 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" |
// Reservierung im EEPROM |
unsigned char EEPromArray[10] EEMEM; |
struct mk_param_struct EEParameterArray[5] EEMEM; |
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; |
number--; |
eeprom_read_block(buffer, &EEParameterArray[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; |
number--; |
eeprom_write_block(buffer, &EEParameterArray[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 |
PORTB = 0x01; // LED_Rot |
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5 |
DDRD |=0x80; // J7 |
PORTD = 0xF7; // LED |
MCUSR &=~(1<<WDRF); |
WDTCSR |= (1<<WDCE)|(1<<WDE); |
WDTCSR = 0; |
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(); |
init_MM3(); |
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%c ",PlatinenVersion/10,PlatinenVersion%10, VERSION_HAUPTVERSION, VERSION_NEBENVERSION,VERSION_INDEX + 'a'); |
printf("\n\r=============================="); |
GRN_ON; |
#define EE_DATENREVISION 66 // 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(); // Kamera |
if(i==3) DefaultKonstanten3(); // Beginner |
if(i>3) DefaultKonstanten2(); // Kamera |
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
} |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 3); // default-Setting |
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"); |
calib_MM3(); |
} |
/* |
//Neutrallage kalibrieren? |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 100 && PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -100) |
{ |
printf("\n\rKalibriere Neutrallage"); |
calib_acc(); |
} |
*/ |
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 |
{ |
// SPI_TransmitByte(); |
UpdateMotor=0; |
//PORTD |= 0x08; |
MotorRegler(); |
//PORTD &= ~0x08; |
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; |
} |
} |
// SPI_StartTransmitPacket(); |
timer = SetDelay(100); |
} |
} |
return (1); |
} |
/branches/v0.60_MicroMag3_Nick666/v0.66c/main.h |
---|
0,0 → 1,97 |
#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 {if(PlatinenVersion == 10) PORTB &=~0x01; else PORTB |= 0x01;} |
#define ROT_ON {if(PlatinenVersion == 10) PORTB |= 0x01; else PORTB &=~0x01;} |
#define ROT_FLASH PORTB ^= (1<<PB0) |
#define GRN_OFF PORTB &=~(1<<PB1) |
#define GRN_ON PORTB |= (1<<PB1) |
#define GRN_FLASH PORTB ^= (1<<PB1) |
#define F_CPU SYSCLK |
//#ifndef F_CPU |
//#error ################## F_CPU nicht definiert oder ungültig ############# |
//#endif |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define EEPROM_ADR_VALID 1 |
#define EEPROM_ADR_ACTIVE_SET 2 |
#define EEPROM_ADR_LAST_OFFSET 3 |
#define CFG_HOEHENREGELUNG 0x01 |
#define CFG_HOEHEN_SCHALTER 0x02 |
#define CFG_HEADING_HOLD 0x04 |
#define CFG_KOMPASS_AKTIV 0x08 |
#define CFG_KOMPASS_FIX 0x10 |
#define CFG_GPS_AKTIV 0x20 |
#define CFG_ACHSENKOPPLUNG_AKTIV 0x40 |
#define CFG_DREHRATEN_BEGRENZER 0x80 |
#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; |
void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length); |
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length); |
extern unsigned char GetActiveParamSetNumber(void); |
extern unsigned char EEPromArray[]; |
#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 "timer0.h" |
#include "uart.h" |
#include "analog.h" |
#include "twimaster.h" |
#include "menu.h" |
#include "rc.h" |
#include "fc.h" |
#include "gps.h" |
#include "compass.h" |
#include "mymath.h" |
#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/v0.60_MicroMag3_Nick666/v0.66c/makefile |
---|
0,0 → 1,411 |
#-------------------------------------------------------------------- |
# MCU name |
MCU = atmega644 |
F_CPU = 20000000 |
#------------------------------------------------------------------- |
HAUPT_VERSION = 0 |
NEBEN_VERSION = 66 |
VERSION_INDEX = 2 |
VERSION_KOMPATIBEL = 6 # 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). |
ifeq ($(VERSION_INDEX), 0) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)a |
endif |
ifeq ($(VERSION_INDEX), 1) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)b |
endif |
ifeq ($(VERSION_INDEX), 2) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)c |
endif |
ifeq ($(VERSION_INDEX), 3) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)d |
endif |
ifeq ($(VERSION_INDEX), 4) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)e |
endif |
ifeq ($(VERSION_INDEX), 5) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)f |
endif |
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. |
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) |
OPT = s |
########################################################################################################## |
# List C source files here. (C dependencies are automatically generated.) |
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c |
SRC += twimaster.c rc.c fc.c GPS.c |
SRC += compass.c mymath.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 \ |
-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) -DVERSION_INDEX=$(VERSION_INDEX) |
# 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/v0.60_MicroMag3_Nick666/v0.66c/menu.c |
---|
0,0 → 1,128 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + 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 = 10,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%c",PlatinenVersion/10,PlatinenVersion%10,VERSION_HAUPTVERSION, VERSION_NEBENVERSION,VERSION_INDEX+'a'); |
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"); |
if(PlatinenVersion == 10) |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertNick - AdNeutralNick, AdNeutralNick); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertRoll - AdNeutralRoll, AdNeutralRoll); |
LCD_printfxy(0,3,"Gier %4i (%3i)",MesswertGier, AdNeutralGier); |
} |
else |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertNick - AdNeutralNick, AdNeutralNick/2); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertRoll - AdNeutralRoll, AdNeutralRoll/2); |
LCD_printfxy(0,3,"Gier %4i (%3i)",MesswertGier, AdNeutralGier/2); |
} |
break; |
case 6: |
LCD_printfxy(0,0,"ACC - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertAccNick,NeutralAccX); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertAccRoll,NeutralAccY); |
LCD_printfxy(0,3,"Hoch %4i (%3i)",Mittelwert_AccHoch/*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,"Poti1: %3i",Poti1); |
LCD_printfxy(0,1,"Poti2: %3i",Poti2); |
LCD_printfxy(0,2,"Poti3: %3i",Poti3); |
LCD_printfxy(0,3,"Poti4: %3i",Poti4); |
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; |
default: MaxMenue = MenuePunkt - 1; |
MenuePunkt = 0; |
break; |
} |
RemoteTasten = 0; |
} |
/branches/v0.60_MicroMag3_Nick666/v0.66c/menu.h |
---|
0,0 → 1,6 |
extern void Menu(void); |
extern void LcdClear(void); |
extern char DisplayBuff[80]; |
extern unsigned char DispPtr; |
extern unsigned char RemoteTasten; |
/branches/v0.60_MicroMag3_Nick666/v0.66c/mymath.c |
---|
0,0 → 1,126 |
/* |
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(((long)y*50) / x); // 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) && (m > 0)) return (-angle + 180); // Quadrant II |
else return (angle - 180); // x < 0 && y < 0 Quadrant III |
} |
const float pgm_sinus_f[91] PROGMEM = {0.0,0.0174524,0.0348995,0.0523360,0.0697565,0.0871557,0.1045285,0.1218693,0.1391731,0.1564345,0.1736482,0.1908090,0.2079117,0.2249510,0.2419219,0.2588190,0.2756373,0.2923717,0.3090170,0.3255681,0.3420201,0.3583679,0.3746066,0.3907311,0.4067366,0.4226182,0.4383711,0.4539905,0.4694715,0.4848096,0.5000000,0.5150381,0.5299193,0.5446390,0.5591929,0.5735764,0.5877852,0.6018150,0.6156615,0.6293204,0.6427876,0.6560590,0.6691306,0.6819983,0.6946584,0.7071068,0.7193398,0.7313537,0.7431448,0.7547096,0.7660444,0.7771459,0.7880107,0.7986355,0.8090170,0.8191520,0.8290376,0.8386706,0.8480481,0.8571673,0.8660254,0.8746197,0.8829476,0.8910065,0.8987940,0.9063078,0.9135454,0.9205048,0.9271838,0.9335804,0.9396926,0.9455186,0.9510565,0.9563047,0.9612617,0.9659258,0.9702957,0.9743701,0.9781476,0.9816272,0.9848077,0.9876883,0.9902681,0.9925461,0.9945219,0.9961947,0.9975640,0.9986295,0.9993908,0.9998477,1.0}; |
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) n=1; |
else if ((winkel > 90 ) && (winkel <= 180)) {winkel = 180 - winkel; n = 1;} |
else if ((winkel > 180 ) && (winkel <= 270)) {winkel = winkel - 180; n = -1;} |
else {winkel = 360 - winkel; n = -1;} //if ((winkel > 270) && (winkel <= 360)) |
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; |
i = i % 200; |
return (pgm_read_byte(&pgm_asin[i]) * m); |
} |
*/ |
/branches/v0.60_MicroMag3_Nick666/v0.66c/mymath.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/v0.60_MicroMag3_Nick666/v0.66c/old_macros.h |
---|
0,0 → 1,47 |
/* |
For backwards compatibility only. |
Ingo Busker ingo@mikrocontroller.com |
*/ |
#ifndef cbi |
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) |
#endif |
#ifndef sbi |
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) |
#endif |
#ifndef inb |
#define inb(sfr) _SFR_BYTE(sfr) |
#endif |
#ifndef outb |
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val)) |
#endif |
#ifndef inw |
#define inw(sfr) _SFR_WORD(sfr) |
#endif |
#ifndef outw |
#define outw(sfr, val) (_SFR_WORD(sfr) = (val)) |
#endif |
#ifndef outp |
#define outp(val, sfr) outb(sfr, val) |
#endif |
#ifndef inp |
#define inp(sfr) inb(sfr) |
#endif |
#ifndef BV |
#define BV(bit) _BV(bit) |
#endif |
#ifndef PRG_RDB |
#define PRG_RDB pgm_read_byte |
#endif |
/branches/v0.60_MicroMag3_Nick666/v0.66c/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/v0.60_MicroMag3_Nick666/v0.66c/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 |
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/v0.60_MicroMag3_Nick666/v0.66c/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[11]; |
volatile int PPM_diff[11]; // das diffenzierte Stick-Signal |
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 < 10) |
{ |
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/v0.60_MicroMag3_Nick666/v0.66c/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[11]; |
extern volatile int PPM_diff[11]; // das diffenzierte Stick-Signal |
extern volatile unsigned char NewPpmData; |
#endif //_RC_H |
/branches/v0.60_MicroMag3_Nick666/v0.66c/timer0.c |
---|
0,0 → 1,158 |
#include "main.h" |
volatile unsigned int CountMilliseconds = 0; |
volatile static unsigned int tim_main; |
volatile unsigned char UpdateMotor = 0; |
volatile unsigned int cntKompass = 0; |
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--; |
if(beeptime & BeepMuster) |
{ |
pieper_ein = 1; |
} |
else pieper_ein = 0; |
} |
else |
{ |
pieper_ein = 0; |
BeepMuster = 0xffff; |
} |
if(pieper_ein) |
{ |
if(PlatinenVersion == 10) PORTD |= (1<<2); // Speaker an PORTD.2 |
else PORTC |= (1<<7); // Speaker an PORTC.7 |
} |
else |
{ |
if(PlatinenVersion == 10) PORTD &= ~(1<<2); |
else PORTC &= ~(1<<7); |
} |
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) |
{ |
timer0_MM3(); // Kompass auslesen |
if (!cntKompass--) // Aufruf mit 10 Hz |
{ |
KompassValue = heading_MM3(); |
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180; |
cntKompass = 980; |
} |
} |
} |
void Timer_Init(void) |
{ |
tim_main = SetDelay(10); |
TCCR0B = CK8; |
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM |
OCR0A = 0; |
OCR0B = 120; |
TCNT0 = (unsigned char)-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)); |
} |
void Delay_ms_Mess(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)) ANALOG_ON; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// 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/v0.60_MicroMag3_Nick666/v0.66c/timer0.h |
---|
0,0 → 1,16 |
#define TIMER_TEILER CK8 |
#define TIMER_RELOAD_VALUE 250 |
void Timer_Init(void); |
void Delay_ms(unsigned int); |
void Delay_ms_Mess(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/v0.60_MicroMag3_Nick666/v0.66c/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/v0.60_MicroMag3_Nick666/v0.66c/twimaster.h |
---|
0,0 → 1,33 |
/*############################################################################ |
############################################################################*/ |
#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_reset(void); |
extern void i2c_init (void); // I2C initialisieren |
extern char i2c_start (void); // Start I2C |
extern void i2c_stop (void); // Stop I2C |
extern char i2c_write_byte (char byte); // 1 Byte schreiben |
extern void i2c_reset(void); |
#endif |
/branches/v0.60_MicroMag3_Nick666/v0.66c/uart.c |
---|
0,0 → 1,335 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + 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" |
#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 NurKanalAnforderung = 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; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ 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; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ 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; |
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]; |
//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]; |
if(tmp_char_arr2[1] == 255) NurKanalAnforderung = 1; else NurKanalAnforderung = 0; // keine Displaydaten |
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 |
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
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); |
} |
//--------------------------------------------------------------------------------------------- |
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 || NurKanalAnforderung) |
{ |
SendOutData('4',0,(unsigned char *)&PPM_in,sizeof(PPM_in)); // DisplayZeile übertragen |
dis_zeile = -1; |
} |
else SendOutData('0' + dis_zeile,0,(unsigned char *)&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen |
} |
if(GetVersionAnforderung && UebertragungAbgeschlossen) |
{ |
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo)); |
GetVersionAnforderung = 0; |
} |
} |
/branches/v0.60_MicroMag3_Nick666/v0.66c/uart.h |
---|
0,0 → 1,94 |
#ifndef _UART_H |
#define _UART_H |
#define MAX_SENDE_BUFF 150 |
#define MAX_EMPFANGS_BUFF 150 |
void BearbeiteRxDaten(void); |
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 void BearbeiteRxDaten(void); |
extern unsigned char MotorTest[4]; |
struct str_DebugOut |
{ |
unsigned char Digital[2]; |
unsigned int Analog[32]; // Debugwerte |
}; |
extern struct str_DebugOut DebugOut; |
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/v0.60_MicroMag3_Nick666/v0.66c/version.txt |
---|
0,0 → 1,91 |
------- |
V0.53 27.04.2007 H.Buss |
- erste öffentliche Version |
V0.53b 29.04.2007 H.Buss |
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft |
V0.53c 29.04.2007 H.Buss |
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind. |
Die angezeigten Werte waren nicht die Werte der Funke |
V0.54 01.05.2007 H.Buss |
- die Paramtersätze können jetzt vor dem Start ausgewählt werden |
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt: |
2 3 4 |
1 x 5 |
- - - |
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw. |
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt |
V0.55 14.05.2007 H.Buss |
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden |
V0.56 14.05.2007 H.Buss |
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren |
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen |
V0.57 24.05.2007 H.Buss |
- Der Höhenregler kann nun auch mittels Schalter bedient werden |
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat |
- Kompass-Einfluss dämpfen bei Neigung |
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen |
- Der Motortest vom Kopter-Tool geht jetzt |
- Man kann den Parametersätzen einen Namen geben |
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert |
V0.58 30.05.2007 H.Buss |
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist |
V0.60 17.08.2007 H.Buss |
- "Schwindel-Bug" behoben |
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft |
- Poti4 zugefügt |
- Es werden jetzt 8 Kanäle ausgewertet |
- Kamera-Servo (an J7) |
- Die Settings müssen überschrieben werden |
V0.61 - V0.63 H.Buss 27.09.2007 |
- Poti 4 und Kanal 8 werden im Menü angezeigt |
- ein paar Kleinigkeiten bei den DefaultKonstanten2 bereinigt |
- Analog.c: Aktuell_ax korrigiert |
- auf 32 Debug-Kanäle erweitert |
- Loopings sind jetzt möglich und einzeln im KopterTool freischaltbar |
- leichte Anpassungen im Gier - Geschwindigkeit und Drift |
- die Hardwareversion V1.1 wird erkannt und das Programm stellt sich auf die geänderte Gyroverstärkung und die geänderten Portpins ein |
- die Software startet nach dem Einschalten schneller, weil der Luftdruckoffset schneller gefunden wird |
- die PPM-Ausgänge liegen wieder an den Pins an |
- Details an der Sensordatenverarbeitung -> es fliegt sich geringfügig anders |
- der MK ist bei wenig Gas nicht mehr so giftig -> soll das Landen vereinfachen |
- I2C-Bus läuft jetzt sicher nach einer Störung wieder an |
- Sticksignale werden präziser ausgewertet |
- Stick-Kanäle werden ans Kopter-Tool übertragen |
- Es muss die Version V1.47 des Kopter-Tool verwendet werden |
- Die Settings werden auf Default zurückgesetzt |
- am Piepen kann man die Fehlerart unterscheiden |
1. einzelnes Piepen beim Einschalten und Kalibrieren |
2. langsames Intervall mindestens 1 Sek -> Empfangsausfall |
3. schnelleres Intervall mindestens 1 Sek -> Akku |
4. sehr schnelles Intervall mindestens 1 Sek -> Kommunikation zu den Reglern gestört |
V0.64 H.Buss 30.09.2007 |
- beim Gieren wurden die Achsen nicht hart genug geregelt |
V0.65a H.Buss 15.10.2007 |
- Integral im Mischer wieder integriert |
- Feinabstimmung im ACC/Gyro Abgleich -> 1/32 & 100 |
- ACC/Gyro Abgleich auch bei HH |
V0.66a H.Buss 3.11.2007 |
- Messwertverarbeitung aus dem Analog-Interrupt entfernt |
- Analogmessung hängt jetzt am FC-Timing |
- Looping-Stick-Hysterese eingebaut |
- Looping-180°-Umschlag einstellbar |
- Achsenkopplung: Gierbewegung verkoppelt Nick und Roll |
- Lageregelung nach ACC-Sensor verbessert |
- zusätzlicher I-Anteil in der Lageregelung verbessert die Neutrallage |
- Gyrodriftkompensation überarbeitet |
- Bug in der Gier-Stick-Berechnung behoben |
- Gyro-Messung auf 1kHz beschleunigt |