/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/compass.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/flight.pnps |
---|
File deleted |
\ No newline at end of file |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/printf_P.c |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/printf_P.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/COPYING |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/fc.c |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/math.c |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/fc.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/math.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/gps.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/analog.c |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/menu.c |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/_Settings.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/rc.c |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/analog.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/menu.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/rc.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/license_buss.txt |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/uart.c |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/twimaster.c |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/uart.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/version.txt |
---|
File deleted |
\ No newline at end of file |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/COPYING.LESSER |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/main.c |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/twimaster.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/old_macros.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/main.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/GPS.c |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/makefile |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/timer0.c |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/flight.pnproj |
---|
File deleted |
\ No newline at end of file |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/compass.c |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Neigung mit Acc/timer0.h |
---|
File deleted |
/branches/v0.60_MicroMag3_Nick666/Flight-Ctrl_MEGA644_V0_60_MM3.hex |
---|
0,0 → 1,1512 |
:100000000C94D1030C94EE030C94EE030C94EE03C9 |
:100010000C94EE030C94EE030C94EE030C94EE039C |
:100020000C94EE030C94CE0B0C94EE030C94EE03A4 |
:100030000C94FB180C94EE030C94EE030C94EE035A |
:100040000C94EE030C94EE030C94750C0C94711448 |
:100050000C94F0050C94EE030C94BA050C94EE038A |
:100060000C94460D0C94EE030C9454180C94EE036F |
:100070006708E108E108E10899087A08E108E10861 |
:10008000E108C508C508C508C508C5089D08E108F8 |
:10009000E1088C08E10895086F0DC10D1A0E750E68 |
:1000A000920EB50EDB0EC20FE41018117911CF11AC |
:1000B0001D129612F01251137513AB13E71325148A |
:1000C0006D1872188E189C18A118AC18B418C8189E |
:1000D0000A0A0D004E65757472616C0048656164B2 |
:1000E000696E67486F6C64000A0D537465756572BC |
:1000F000756E673A20004F4B0A0D000A0D4162678A |
:100100006C65696368204C756674647275636B73A3 |
:10011000656E736F722E2E000A0D4B616C696272F0 |
:1001200069657265204B6F6D70617373000A0D42D3 |
:10013000656E75747A6520506172616D6574657263 |
:100140007361747A202564000A0D496E69742E204B |
:10015000454550524F4D3A2047656E65726965724C |
:10016000652044656661756C742D506172616D65C2 |
:100170007465722E2E2E000A0D3D3D3D3D3D3D3DE8 |
:100180003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D9F |
:100190003D3D3D3D3D3D3D000A0D466C696768743F |
:1001A000436F6E74726F6C205625642E2564200098 |
:1001B0002E005A5F4F66667365743A2020253369B6 |
:1001C00000595F4F66667365743A202025336900D5 |
:1001D000585F4F66667365743A2020253369004D79 |
:1001E0004D33206B616C69622E0052616E67653A17 |
:1001F0002533692D253369005374656C6C756E6702 |
:100200003A2025336900536574706F696E7420203D |
:1002100025336900536572766F202000506F746932 |
:10022000343A202025336900506F7469333A202016 |
:1002300025336900506F7469323A202025336900F4 |
:10024000506F7469313A202025336900537461720C |
:10025000743A2020202020253569004D657373777E |
:100260006572743A20202535690052696368747597 |
:100270006E673A2020253569004B6F6D706173738E |
:100280002020202020202000456D70662E506567BC |
:10029000656C3A253569005370616E6E756E673A0C |
:1002A000202025356900486F63682025346920289F |
:1002B0002533692900526F6C6C202534692028256C |
:1002C000336929004E69636B202534692028253362 |
:1002D000692900414343202D2053656E736F7200DE |
:1002E0004769657220253469202825336929005221 |
:1002F0006F6C6C20253469202825336929004E69EC |
:10030000636B2025346920282533692900477972D9 |
:100310006F202D2053656E736F720050333A253471 |
:100320006920204B616EE46C65200050313A253421 |
:1003300069202050323A253469200047733A253429 |
:1003400069202047693A25346920004E693A2534EE |
:10035000692020526F3A25346920004B373A253402 |
:100360006920204B616EE46C6520004B353A2534E2 |
:100370006920204B363A25346920004B333A253426 |
:100380006920204B343A25346920004B313A25341A |
:100390006920204B323A25346920004B6F6D706123 |
:1003A00073733A20202025356900526F6C6C3A2017 |
:1003B0002020202020253569004E69636B3A2020DB |
:1003C0002020202025356900616B742E204C616748 |
:1003D000650048F668656E726567656C756E6700E6 |
:1003E0004B65696E6520004F666620202020202026 |
:1003F0003A20253569004C756674647275636B3AF2 |
:100400002025356900536F6C6C486F6568653A202C |
:1004100025356900486F6568653A20202020202531 |
:1004200035690028632920486F6C67657220427522 |
:1004300073730053657474696E673A2025642000F5 |
:100440005625642E2564002B2B204D696B726F4B53 |
:100450006F70746572202B2B005B25695D000001B5 |
:10046000020305060708090A0B0C0D0F10111213E1 |
:100470001415161718191A1B1B1C1D1E1F202121CD |
:1004800022232425252627272829292A2B2B2C2CF3 |
:100490002D2E2E2F2F30303131323233333434344D |
:1004A000353536363637373838383939393A3A3AD1 |
:1004B0003B3B3B3C3C3C3C3D3D3D3D3E3E3E3E3F70 |
:1004C0003F3F3F4040404041414141414242424222 |
:1004D00042434343434343444444444444454545E1 |
:1004E00045454545464646464646464647474747AC |
:1004F000474747474848484848484848484949497D |
:10050000494949494949494A4A4A4A4A4A4A4A4A52 |
:100510004A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4B2E |
:100520004C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4D0A |
:100530004D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4DEB |
:100540004E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4ECB |
:100550004E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4FAF |
:100560004F4F4F4F4F4F4F4F4F4F4F4F00000000D7 |
:1005700096438B3C295C0F3DF4FD543D295C8F3D37 |
:100580000E2DB23D3D0AD73D23DBF93D04560E3E0C |
:1005900077BE1F3E0E2D323E8195433EF4FD543E04 |
:1005A0006666663ED9CE773EA69B843EDF4F8D3E83 |
:1005B0000681953E3F359E3E79E9A63EA01AAF3EA4 |
:1005C000C74BB73E0000C03E2731C83E4E62D03E0A |
:1005D0007593D83E8941E03EB072E83EC520F03EBA |
:1005E000EC51F83E0000003F0AD7033F14AE073F2E |
:1005F0001F850B3FA01A0F3FAAF1123F2B87163F12 |
:10060000AC1C1A3F2DB21D3F2506213FA69B243F5F |
:100610009EEF273F96432B3F8D972E3F85EB313F33 |
:10062000F4FD343F6210383FD1223B3F3F353E3F1F |
:10063000AE47413F9318443F79E9463F5EBA493F90 |
:10064000448B4C3FA01A4F3FFCA9513F5839543FAF |
:10065000B4C8563F8716593F5A645B3F2DB25D3F81 |
:100660000000603F4A0C623F9318643FDD24663F00 |
:100670009EEF673FE7FB693FA8C66B3FDF4F6D3FCB |
:10068000A01A6F3FD7A3703F0E2D723FBC74733F0B |
:100690006ABC743F1904763FC74B773FEC51783FF3 |
:1006A0001058793F355E7A3F5A647B3FF6287C3F8D |
:1006B00091ED7C3FA4707D3F3F357E3F52B87E3F39 |
:1006C000DBF97E3FEE7C7F3F77BE7F3F77BE7F3F8B |
:1006D0000000803F0000803F000001010101020294 |
:1006E00002030303030404040505050506060607C3 |
:1006F000070707080808090909090A0A0A0B0B0B6A |
:100700000C0C0C0C0D0D0D0E0E0E0E0F0F0F10100D |
:1007100010111111111212121313131414141415B1 |
:100720001515161616171717181818191919191A52 |
:100730001A1A1B1B1B1C1C1C1D1D1D1E1E1E1F1FF1 |
:100740001F2020202121212222222323232424258B |
:10075000252526262627272728282929292A2A2A1F |
:100760002B2B2C2C2C2D2D2E2E2E2F2F30303131AB |
:100770003132323333343435353636373738383929 |
:10078000393A3A3B3B3C3C3D3E3E3F404041424291 |
:1007900043444445464748494A4B4C4D4F505254B8 |
:1007A0005A0011241FBECFEFD0E1DEBFCDBF11E054 |
:1007B000A0E0B1E0ECEDFDE502C005900D92AC3893 |
:1007C000B107D9F715E0ACE8B1E001C01D92A43340 |
:1007D000B107E1F70E9425040C94ED2E0C94000063 |
:1007E000A2E0B0E00E94D92E802D99270895FB0148 |
:1007F000282F863008F025E0842F9927429FD001CA |
:100800001124AC59BF4F019724F001900E94E12EB2 |
:10081000FACFA2E0B0E0022E0E94E12E0895CF931D |
:10082000DF93FB01C42FDD27863008F085E0489F69 |
:10083000D0011124AC59BF4F219724F00E94D92E2A |
:100840000192FACFDF91CF9108950F931F93CF9329 |
:10085000DF9381E087B98FEF88B98BE184B9289A5B |
:100860008EE38AB9579A87EF8BB984B7877F84BFA5 |
:10087000809160008861809360001092600088EE33 |
:1008800093E09093A7018093A60110922802109202 |
:1008900027021092BD041092BC04109226021092FE |
:1008A0002502109224021092230228980E94080D1B |
:1008B0000E94C0070E94E6180E94400D0E943A184C |
:1008C0000E94491678941092B4038CE38093B50388 |
:1008D00084E08093B6038CE390E09F938F931F9204 |
:1008E0001F9288E991E09F938F931F920E94400985 |
:1008F00087E791E09F938F931F920E944009299A66 |
:10090000A1E0B0E00E94D92E802D2DB73EB7265F22 |
:100910003F4F2DBF8B33A9F188E491E09F938F93D4 |
:100920001F920E9440090E94B1204AE364EE74E0E5 |
:1009300080E00E94F70301E00F900F900F900230CB |
:1009400049F40E9444204AE364EE74E082E00E948D |
:10095000F70303E04AE364EE74E0802F0E94F7039C |
:100960000F5F063060F381E022E030E0D901082E0D |
:100970000E94E12E8BE321503040D901082E0E94C5 |
:10098000E12E02E010E0D8010E94D92E802D4AE32A |
:1009900064EE74E00E940F04D8010E94D92E802DCD |
:1009A00099279F938F938DE291E09F938F931F924E |
:1009B0000E94400984EF91E00E94B90BEC010F9076 |
:1009C0000F900F900F900F90CE010E94C20B8823C2 |
:1009D000D9F3E091E604FF27EE0FFF1FE854FB4F29 |
:1009E0008081918185369105E4F0E091E704FF274D |
:1009F000EE0FFF1FE854FB4F8081918185369105F2 |
:100A000084F088E191E09F938F931F920E944009A8 |
:100A10008091EC040F900F900F9083FF02C00E9412 |
:100A20006A168091EC0480FF20C08BEF90E09F93CA |
:100A30008F931F920E94400984EC99E00E94B90BA9 |
:100A4000EC010E945C100F900F900F90CE010E945D |
:100A5000C20B8823D9F386EF90E09F938F931F9268 |
:100A60000E9440090F900F900F900E9468212898D3 |
:100A700080ED97E09093A7018093A60188EE93E024 |
:100A80009093AF038093AE0385E58093A90388EE2E |
:100A900090E09F938F931F920E9440098091EC04F5 |
:100AA0000F900F900F9082FF03C08CED90E002C07A |
:100AB00084ED90E09F938F931F920E9440090F90C6 |
:100AC0000F900F9080ED90E09F938F931F920E9464 |
:100AD00040090E9483100F900F900F908091A50104 |
:100AE000882379F11092A5010E947B220E94212186 |
:100AF000289880910101882319F081508093010189 |
:100B000080912202882329F08091220281508093D3 |
:100B1000220220910601309107018091FC0499275F |
:100B20002817390734F480ED97E09093A70180935C |
:100B3000A6018091D101882319F40E943A1801C0BE |
:100B400028980E94DB070E94490880E090E00E94FC |
:100B5000C20B882319F280912902882329F088B1D9 |
:100B600090E1892788B901C0449884EF91E00E9400 |
:100B7000B90BB4CF1F920F920FB60F9211248F931F |
:100B80009F93EF93FF93809100018823E1F480917C |
:100B9000A1019091A20101969093A2018093A101DD |
:100BA000FC01E558FD4FE081ED3019F086399105E3 |
:100BB00039F41092A2011092A10181E0809300010A |
:100BC000E093C60004C01092A2011092A101FF910F |
:100BD000EF919F918F910F900FBE0F901F901895DE |
:100BE0001F920F920FB60F9211242F933F934F93A2 |
:100BF0008F939F93AF93BF93CF93DF93EF93FF9325 |
:100C00008091C6008093900140919C01463910F07C |
:100C100010929B01809190018D3009F05CC0809111 |
:100C20009B01823009F057C010929B01A42FBB2773 |
:100C3000FD01E454FC4F3081ED01C354DC4F2881A9 |
:100C400080919F019091A001831B9109821B9109C2 |
:100C50009F709093A00180939F019C0196E0369530 |
:100C600027959A95E1F7235C20939E01982F9F7317 |
:100C7000935C90939D018081281729F488819817AF |
:100C800011F491E006C0809193018F5F80939301EE |
:100C900090E080919101882309F064C0992309F4C0 |
:100CA00061C081E08093910140939401A254BC4FB4 |
:100CB0008DE08C938091C003823509F053C088E1A8 |
:100CC00090E02CE00FB6F894A895809360000FBEDA |
:100CD0002093600047C080919B018130D9F0813022 |
:100CE00018F08230E9F530C080919001833239F4F8 |
:100CF00080919101882319F481E080939B01809178 |
:100D000090018093BE0381E080939C0180919001CB |
:100D1000992715C082E080939B01E42FFF278091E3 |
:100D20009001E254FC4F80834F5F40939C012091DF |
:100D3000900180919F019091A001820F911D90934D |
:100D4000A00180939F010EC0E42FFF2780919001A6 |
:100D5000E254FC4F8083463938F310929B01E7CF71 |
:100D600010929B01FF91EF91DF91CF91BF91AF91D5 |
:100D70009F918F914F913F912F910F900FBE0F90A8 |
:100D80001F901895DC0140E050E020E030E0EBE7F8 |
:100D9000F2E005C08191280F311D4F5F5F4F4A1768 |
:100DA0005B07C1F73F70C90136E0969587953A9584 |
:100DB000E1F7835CFD01E558FD4F808311962F73A9 |
:100DC000235CFD01E558FD4F2083A458BD4F8DE005 |
:100DD0008C931092000180917B028093C60008954D |
:100DE000EF92FF920F931F93CF93DF937A01722FAD |
:100DF00093E290937B0260937C0280937D0203E0F8 |
:100E000010E060E0AEE7B2E046C0F701E60FF11D8A |
:100E100090816F5F715019F4E0E040E00FC0F7017E |
:100E2000E60FF11D40816F5F715011F4E0E006C0E4 |
:100E3000F701E60FF11DE0816F5F7150892F8695F4 |
:100E40008695835C8C935527892F992783709070A2 |
:100E500024E0880F991F2A95E1F79A0194E03695CE |
:100E600027959A95E1F7822B835CED0189834F707A |
:100E70005070440F551F440F551F8E2F8295869535 |
:100E800086958370842B835C8A83EF73E35CEB83AA |
:100E90000C5F1F4F1496772309F0B7CFC8010E944B |
:100EA000C206E6E0CDB7DEB70C94C42E1F93CF93F5 |
:100EB000DF93EC0170E0A22FBB27129748C0E42F0C |
:100EC000FF27E254FC4F30814F5FE42FFF27E254AD |
:100ED000FC4F50814F5FE42FFF27E254FC4F1081FD |
:100EE0004F5FE42FFF27E254FC4F20814F5F842F98 |
:100EF0009927A817B90774F15D53FE01E70FF11D9B |
:100F00003D53330F330F852F82958F70382B3083ED |
:100F1000613001F1912F9D537F5FFE01E70FF11DBD |
:100F200071505295507F892F86958695582B508306 |
:100F300063506F3F79F07E5FFE01E70FF11D9295E0 |
:100F4000990F990F907C2D53922B90837F5F66238E |
:100F500009F0B5CFDF91CF911F9108951F93182FFE |
:100F60008A3019F48DE00E94AE078091C00085FFA1 |
:100F7000FCCF1093C60080E090E01F910895089583 |
:100F8000E1ECF0E088E18083A0ECB0E08C9182603D |
:100F90008C938081806880838081806480838AE2F2 |
:100FA0008093C40088EC90E00E94B90B9093A80352 |
:100FB0008093A703089580910001882309F468C0F5 |
:100FC00080918C01882371F080910001882351F079 |
:100FD0002BE049EA53E060917A0287E40E94F00630 |
:100FE00010928C018091A7039091A8030E94C20BDC |
:100FF000882321F480918E018823B1F08091000133 |
:10100000882391F022E344E554E060917A0284E47D |
:101010000E94F00610928E018AEF90E00E94B90BB8 |
:101020009093A8038093A70380918D018823F1F00A |
:10103000809100018823D1F00E948C1010928D01C4 |
:1010400080919A018F5F80939A01843011F41092FD |
:101050009A0180919A0144E1849FA0011124485E85 |
:101060005E4F24E160E0805D0E94F00680918F0178 |
:10107000882371F080910001882351F02AE044EB2D |
:1010800053E060917A0286E50E94F00610928F018B |
:101090000895A2E0B0E0EFE4F8E00C94AB2E80916C |
:1010A0009101882309F48FC08FEF80930101809113 |
:1010B000C0039927AA27BB27FC01E356F040E4317F |
:1010C000F10508F07EC0E85CFF4F0C94D32E209110 |
:1010D000940143E06BE089EA93E00E945607809117 |
:1010E000C8019091AB03892B8093C80181E0809364 |
:1010F0008E0167C02091940143E062E0CE01019629 |
:101100000E9456078091C8019981892B8093C8015C |
:1011100081E080938D0155C02091940143E064E00B |
:1011200086E991E00E9456074CC081E080938F01D0 |
:1011300048C081E080938C0144C02091940143E039 |
:1011400062E0CE0101960E94560789818F3F89F0A7 |
:10115000863010F085E089834AE364EE74E089818B |
:101160000E940F0489812AE344EE54E060917A02E0 |
:1011700008C010917A020E94F0032AE344EE54E082 |
:10118000612F855B0E94F0061CC02091940143E012 |
:101190006AE384EE94E00E9456078091C0034AE31C |
:1011A00064EE74E08B560E94F7038091C0038B5667 |
:1011B000A2E0B0E0082E0E94E12E0E94F0030E94FF |
:1011C000662210929101E3E0CE5F0C94C72E982F17 |
:1011D00080918604813069F48091C701E82FFF2750 |
:1011E000E85EFE4F90838F5F8093C70121E030E07F |
:1011F00005C0892F0E94AE07282F3327C901089503 |
:101200001F93182F04C080E30E94E70811501116A5 |
:10121000D4F31F9108951F93182F04C080E20E94F9 |
:10122000E70811501116D4F31F9108950F931F93DF |
:10123000CF93DF938C01EB0108C0F8010F5F1F4FC4 |
:10124000E4918E2F0E94E70821972097B1F7DF9154 |
:10125000CF911F910F9108950F931F93CF93DF9319 |
:101260008C01EB0106C0F80181918F010E94E70813 |
:1012700021972097C1F7DF91CF911F910F9108958A |
:10128000A3E3B0E0E6E4F9E00C949C2E29968FAD40 |
:10129000299780938604CE01855B9F4F9D838C8325 |
:1012A0002B968EAD9FAD2B979FA78EA7222433241C |
:1012B000210102C0130124010EA51FA502C00F5F6A |
:1012C0001F4FF801F490FF2019F0F5E2FF16B9F76F |
:1012D000B8018EA59FA5681B790B11F00E94160915 |
:1012E000FF2009F442C20F5F1F4F1FA70EA71982EC |
:1012F000AC81BD811BAA1AAA9FEF99ABEEA5FFA5F1 |
:10130000CF0101969FA78EA7B49095E7B91621F05B |
:101310008B2D8062883789F4EBA9E0FF07C02D9000 |
:101320003D904D905C901397149607C08D919C91C1 |
:1013300011971C01442455241296F0E2BF1621F4A3 |
:1013400089818823D9F685C083E2B81609F483C061 |
:101350009AE2B91621F0EDE2BE1669F408C0FD016B |
:101360001296E081EAABE7FFC9CFE195EAABFBA9B2 |
:10137000F061FF7D72C08BE2B81609F46AC09EE28C |
:10138000B916B1F52EA53FA52F5F3F4FEEA5FFA5DE |
:1013900084918A3221F0B82E20E030E01BC0FD019C |
:1013A00012964081518157FF02C04FEF5FEF49AB6A |
:1013B0003FA72EA7A3CFC90103E0880F991F0A9565 |
:1013C000E1F7220F331F280F391F2B0D311D20533A |
:1013D0003040B49031968B2D80538A3060F3FFA754 |
:1013E000EEA7A90137FF02C04FEF5FEF49AB8DCFEA |
:1013F000F0E3BF1631F48BA984FD80CF80628BAB04 |
:101400007DCF8B2D81538930E8F420E030E0C90195 |
:10141000F3E0880F991FFA95E1F7220F331F280F89 |
:10142000391F2B0D311D20533040EEA5FFA5CF01F4 |
:1014300001969FA78EA7B4908B2D80538A3038F3E6 |
:101440002AAB63CF98E6B91651F4EBA9E460EBAB95 |
:1014500055CFB98253CFFBA9F860FBAB4FCF8CE6D9 |
:10146000B81621F49BA991609BAB48CFBD83AC8398 |
:10147000E3E6BE1639F41296BD83AC8312978C91C5 |
:101480008E8318C1F4E4BF1639F084E6B81639F03B |
:1014900099E6B91659F503C0EBA9E160EBABFBA9DE |
:1014A000F0FF08C01496BD83AC835E904E903E90D2 |
:1014B0002E900AC01296BD83AC839E918E911C0122 |
:1014C000442437FC4094542C57FC03C08AE088AB7A |
:1014D00092C05094409430942094211C311C411CA3 |
:1014E000511C8DE289839AE098AB85C0EFE4BE166B |
:1014F00029F0FFE6BF1639F488E061C09BA991602E |
:101500009BABE8E056C0F0E7BF1671F41296BD83BE |
:10151000AC839E918E911C01442455248BA9806438 |
:101520008BAB78E7B72E5EC0E3E7BE16D9F512960F |
:10153000BD83AC83DE90CE90C114D10489F488E2DF |
:101540008E838EE68F8385E788878CE689878A87F6 |
:1015500089E28B871C8666E0C62ED12CCC0EDD1E60 |
:10156000F9A9F7FD13C04F2F552747FD509560E0AF |
:1015700070E0C6010E94A42C009711F419A90DC0B7 |
:101580008C1919A981174CF4182F07C0F601019086 |
:101590000020E9F731971E2F1C19198242013101F1 |
:1015A00040E094C085E5B81631F095E7B91649F4E6 |
:1015B000EAE0E8AB1FC0FBA9F160FBAB8AE088ABB7 |
:1015C00019C098E5B91621F0E8E7BE1609F06EC01B |
:1015D000FBA9F3FD02C080E1F2CF211431044104E4 |
:1015E000510419F490E198AB05C0EBA9E064EBABB2 |
:1015F000F0E1F8AB198289A987FD03C09BA99F7D03 |
:101600009BAB211431044104510461F4E9A9EE2398 |
:1016100049F46624772443015EE2C52ED12CCC0E1A |
:10162000DD1E3EC04EE2C42ED12CCC0EDD1EF8A92C |
:10163000EF2EFF2400271127C201B101A801970155 |
:101640000E945F2E6A3020F430E3A32EA60E08C05D |
:1016500027E5A22EA60E88E5B81611F49FEDA92263 |
:10166000F601A2926F01C201B101A80197010E9487 |
:101670005F2E39014A012E143F044006510618F02E |
:1016800019012A01D9CFF8A9F83051F48BA983FFA9 |
:1016900007C090E3A91621F080E3F60182936F0161 |
:1016A000CE018C19182F125D49A910C0BB2009F476 |
:1016B0005CC0BE8219824201310100E096E0C92E71 |
:1016C000D12CCC0EDD1E11E021E005C0212F042F0E |
:1016D000011B07FD00E08981882319F0812F8F5FAE |
:1016E00007C09BA996FD02C0812F02C0822F8E5F8A |
:1016F000A82EA00EEBA9EE2EFF2480E3482E512C3D |
:101700004E205F204114510421F48AA98A190E94B5 |
:101710000B098981882329F061E070E0CE010196F0 |
:1017200009C0E6FE09C080E38A83BB8262E070E004 |
:10173000CE0102960E942C09F0E24F16510421F4CA |
:101740008AA98A190E940009802F0E940009612F2E |
:10175000772767FD7095C6010E942C09E4FEAACD8B |
:101760008AA98A190E940B09A5CDE2E1CD5C0C94EF |
:10177000B82E2091A3013091A4012F5F3F4F820F1B |
:10178000931F08952091A3013091A401821B930B14 |
:10179000892F992786958074992708951F920F9213 |
:1017A0000FB60F921124EF92FF920F931F932F9376 |
:1017B0003F934F935F936F937F938F939F93AF93D9 |
:1017C000BF93CF93DF93EF93FF93809104018150F8 |
:1017D000809304018F3F09F06DC083E88093B000CF |
:1017E00080918B01C82FDD27D093A901C093A80158 |
:1017F00080910A05E090060580FF1EC06091E2011D |
:101800007091E3018091E4019091E501FF240027AC |
:10181000112720E830E040E050E00E94812EC8010E |
:10182000B7010E94192E20E032E040E050E00E9413 |
:10183000812EC20FD31F1DC06091E2017091E301A0 |
:101840008091E4019091E501FF240027112720E811 |
:1018500030E040E050E00E94812EC801B7010E94B4 |
:10186000192E20E032E040E050E00E94812EC21BA1 |
:10187000D30BD093A901C093A8012091A801309166 |
:10188000A9018091070599272817390734F080911D |
:10189000080599278217930724F49093A901809350 |
:1018A000A8018091A8018093B300809109058093DD |
:1018B000040104C083E08093B0005F98FF91EF9132 |
:1018C000DF91CF91BF91AF919F918F917F916F9158 |
:1018D0005F914F913F912F911F910F91FF90EF904A |
:1018E0000F900FBE0F901F9018951F920F920FB67A |
:1018F0000F9211242F933F934F935F936F937F9396 |
:101900008F939F93AF93BF93EF93FF938091AA011F |
:1019100081508093AA018F3F01F589E08093AA014D |
:10192000809105018F5F817080930501882319F4F0 |
:1019300081E08093A5018091A3019091A40101967B |
:101940009093A4018093A3018091D101882329F071 |
:101950008091D10181508093D1018091A601909115 |
:10196000A701029758F08091A6019091A7010197D5 |
:101970009093A7018093A6015A9A01C05A9880912A |
:10198000EC0483FF34C00E94DA158091020190912B |
:10199000030101979093030180930201809102015A |
:1019A000909103018F5F9F4F11F50E942115909335 |
:1019B00013028093120280911202909113022091DF |
:1019C000140230911502821B930B845E9D4F68E6D2 |
:1019D00071E00E944C2E845B90409093170280939C |
:1019E000160280E293E09093030180930201FF913D |
:1019F000EF91BF91AF919F918F917F916F915F9187 |
:101A00004F913F912F910F900FBE0F901F901895FF |
:101A10008091A3019091A4010B969093AC018093C7 |
:101A2000AB0182E085BD83EA84BD17BC88E788BD31 |
:101A300083EC8093B00086E08093B100E0E7F0E0B3 |
:101A4000808182608083EEE6F0E080818160808327 |
:101A50008AE08093B3001092B20008952091A30110 |
:101A60003091A4012F5F3F4F280F391F8091A301B0 |
:101A70009091A401A901481B590B57FFF7CF089576 |
:101A800010927C008FEE80937A0008951F920F923F |
:101A90000FB60F921124EF92FF920F931F932F9383 |
:101AA0003F934F935F936F937F938F939F93AF93E6 |
:101AB000BF93CF93DF93EF93FF9310927A008091BF |
:101AC000C3018F5F8093C3018150E82FFF27E83067 |
:101AD000F10508F0CFC2E45BFF4F0C94D32E2091A8 |
:101AE000D6013091D7018091780090917900281B20 |
:101AF000390B8091B1019091B201820F931F9093A5 |
:101B0000B2018093B1018091BB018F5F8093BB01D3 |
:101B10008091060290910702A0910802B0910902FB |
:101B2000442737FD4095542F820F931FA41FB51FE4 |
:101B30008093060290930702A0930802B0930902D3 |
:101B400080910A0290910B02A0910C02B0910D02BB |
:101B5000820F931FA41FB51F80930A0290930B025C |
:101B6000A0930C02B0930D0281E08093C401809198 |
:101B7000C1019091C20101969093C2018093C1016D |
:101B80007DC260917800709179008091D40190912C |
:101B9000D501681B790B8091FE019091FF01A09106 |
:101BA0000002B09101029B01442737FD4095542F5C |
:101BB000820F931FA41FB51F8093FE019093FF0116 |
:101BC000A0930002B093010280910202909103025F |
:101BD000A0910402B0910502820F931FA41FB51FAC |
:101BE0008093020290930302A0930402B093050233 |
:101BF00080917800909179000A9710F464E47DEF69 |
:101C00008091780090917900895E934010F06CEBA0 |
:101C100072E08091AF019091B001860F971F909371 |
:101C2000B0018093AF018091BA018F5F8093BA01B8 |
:101C300082E058C060917800709179008091D20163 |
:101C40009091D301681B790B8091F6019091F70177 |
:101C5000A091F801B091F9019B01442737FD40950F |
:101C6000542F820F931FA41FB51F8093F6019093EA |
:101C7000F701A093F801B093F9018091FA019091D6 |
:101C8000FB01A091FC01B091FD01820F931FA41FE5 |
:101C9000B51F8093FA019093FB01A093FC01B093D0 |
:101CA000FD0180917800909179000A9710F464E426 |
:101CB0007DEF8091780090917900895E934010F0DB |
:101CC0006CEB72E08091AD019091AE01860F971F91 |
:101CD0009093AE018093AD018091B9018F5F8093A5 |
:101CE000B90184E08093C401C9C1409106015091BB |
:101CF000070180917800909179009A01220F331F9B |
:101D0000240F351F63E070E00E94382E260F371F26 |
:101D10003695279536952795309307012093060130 |
:101D200086E0E0CF8091DA019091DB01209178008C |
:101D300030917900821B930B9093880480938704E1 |
:101D40008091B3019091B40120918704309188046F |
:101D5000820F931F9093B4018093B3018091BD01D2 |
:101D60008F5F8093BD0187E0BDCF80917800909117 |
:101D700079002091D8013091D901821B930B909367 |
:101D80009304809392048091B5019091B6012091C3 |
:101D9000920430919304820F931F9093B601809325 |
:101DA000B5018091BC018F5F8093BC0185E0809379 |
:101DB000C40186E0E4C06091780070917900E09001 |
:101DC000DC01F090DD010091DE011091DF01882738 |
:101DD00077FD8095982F0E94572DA80197010E94AA |
:101DE000B12C0E943A2D7093B8016093B7012091F5 |
:101DF000B7013091B801E0918704F0918804809197 |
:101E000092049091930497FF03C0909581959F4F02 |
:101E100064E070E00E944C2EEB01CF01F7FF03C09D |
:101E2000909581959F4F64E070E00E944C2E260FA4 |
:101E3000371F2C0F3D1F3093B8012093B7018091BD |
:101E4000B7019091B801029704F16091DC017091A3 |
:101E5000DD018091DE019091DF0120E030E048E477 |
:101E600054E40E94612D88230CF03CC06091DC0199 |
:101E70007091DD018091DE019091DF012AE037ED64 |
:101E800043EA5CE30E94B22C25C08091B701909197 |
:101E9000B8018F5F9F4F34F56091DC017091DD01D7 |
:101EA0008091DE019091DF0120E030E046E154E4D2 |
:101EB0000E94642D1816B4F46091DC017091DD016C |
:101EC0008091DE019091DF012AE037ED43EA5CE387 |
:101ED0000E94B12C6093DC017093DD018093DE01E0 |
:101EE0009093DF0181E08093BE0180917800909112 |
:101EF000790090938A048093890420910E02309196 |
:101F00000F0240911002509111028091B7019091FF |
:101F1000B801AA2797FDA095BA2F280F391F4A1F8D |
:101F20005B1F20930E0230930F02409310025093D8 |
:101F30001102E0900E02F0900F0200911002109139 |
:101F4000110260910E0270910F0280911002909127 |
:101F5000110220E034E040E050E00E94812EE21ABD |
:101F6000F30A040B150BE0920E02F0920F0200939D |
:101F700010021093110283E08093C40187E08093E4 |
:101F8000C3017CC0809197049091980420917800BF |
:101F900030917900820F931F909398048093970457 |
:101FA00080918F048F5F80938F0480918F048530A0 |
:101FB00008F460C0809178009091790090930D01B1 |
:101FC00080930C0110928F0480918B0490918C046B |
:101FD0002091970430919804821B930B20912A0240 |
:101FE00030912B02821B930B9093C0018093BF0111 |
:101FF0006091970470919804E0900801F0900901B5 |
:1020000000910A0110910B01882777FD8095982F88 |
:10201000A8019701220F331F441F551F2E0D3F1D8E |
:10202000401F511F620F731F841F951F24E030E073 |
:1020300040E050E00E94812E209308013093090176 |
:1020400040930A0150930B0120918B0430918C0432 |
:102050008091080190910901A0910A01B0910B01B2 |
:10206000281B390B30932B0220932A0210929804DC |
:10207000109297041092C4011092C3018091C40180 |
:1020800080937C008FEE80937A00FF91EF91DF9137 |
:10209000CF91BF91AF919F918F917F916F915F9100 |
:1020A0004F913F912F911F910F91FF90EF900F90C3 |
:1020B0000FBE0F901F901895CF93DF93C0E0D0E034 |
:1020C000C7BD82E390E00E942E0D80EB91E09F93CC |
:1020D0008F931F920E94400980910C0190910D01F5 |
:1020E0000F900F900F908458934020F02196CA3F94 |
:1020F000D10531F7C093940488EC90E00E942E0D36 |
:10210000DF91CF910895E8E1F1E080E2819391E0E1 |
:10211000E836F907D9F70895FF920F931F9380913E |
:10212000C801282F3327C90181709070682F882338 |
:1021300091F08091C901882311F0815002C08091F3 |
:1021400068018093C901E8E1F1E080E2819391E0C8 |
:10215000E836F907D9F7A9014270507021FF0DC088 |
:102160008091C9018F5F8093C901E8E1F1E080E2CD |
:10217000819391E0E836F907D9F7662321F0452BE2 |
:1021800011F01092C90181E18093C7018091C901CA |
:1021900099279F938F9389E594E09F938F9381E094 |
:1021A0008F930E9440098091C9010F900F900F906A |
:1021B0000F900F90E82FFF27EC30F10508F086C351 |
:1021C000EC5AFF4F0C94D32E1092C70187E494E091 |
:1021D0009F938F9311E01F930E94400984E18093A5 |
:1021E000C7018CE390E09F938F931F921F9280E42E |
:1021F00094E09F938F931F930E94400988E28093FD |
:10220000C7010E94F00399279F938F9383E394E083 |
:102210009F938F931F930E9440098CE38093C70183 |
:1022200083E294E09F938F931F930E9440094AC3D7 |
:102230008091EC0480FF44C01092C70180912A0273 |
:1022400090912B029F938F9384E194E09F938F93BF |
:1022500011E01F930E94400984E18093C70180919F |
:102260002C0290912D029F938F9385E094E09F9391 |
:102270008F931F930E94400988E28093C701809149 |
:102280000C0190910D019F938F9386EF93E09F93A4 |
:102290008F931F930E9440098CE38093C701809124 |
:1022A000940499279F938F9387EE93E09F938F9346 |
:1022B0001F930E9440098DB79EB744968DBF0BC3F4 |
:1022C00084E18093C70180EE93E09F938F9311E0A8 |
:1022D0001F930E94400988E28093C70182ED93E03A |
:1022E0009F938F931F930E9440098DB79EB70696C8 |
:1022F000E5CF1092C70188EC93E09F938F9311E094 |
:102300001F930E94400984E18093C7016091E2011C |
:102310007091E3018091E4019091E50120E034E0C7 |
:1023200040E050E00E94812E5F934F933F932F93A4 |
:1023300089EB93E09F938F931F930E94400988E25B |
:102340008093C7016091EA017091EB018091EC01EB |
:102350009091ED0120E034E040E050E00E94812EB9 |
:102360005F934F933F932F938AEA93E09F938F93CA |
:102370001F930E9440098CE38093C7018091120251 |
:10238000909113029F938F938BE993E09F938F9388 |
:102390001F930E9440098DB79EB746968FCF10922B |
:1023A000C7018091BC049091BD042091BA04309182 |
:1023B000BB049F938F933F932F938BE893E09F935E |
:1023C0008F9311E01F930E94400984E18093C7011D |
:1023D0008091C0049091C1042091BE043091BF044B |
:1023E0009F938F933F932F938BE793E09F938F93CC |
:1023F0001F930E94400988E28093C7018091C40422 |
:102400009091C5042091C2043091C3049F938F938F |
:102410003F932F938BE693E09F938F931F930E949C |
:1024200040098CE38093C7018091C6049091C70452 |
:102430009F938F938BE593E070C01092C701E0915A |
:10244000E504FF27EE0FFF1FE854FB4F2081318189 |
:10245000E091E404FF27EE0FFF1FE854FB4F80815B |
:1024600091813F932F939F938F938BE493E09F935E |
:102470008F9311E01F930E94400984E18093C7016C |
:10248000E091E704FF27EE0FFF1FE854FB4F208188 |
:102490003181E091E604FF27EE0FFF1FE854FB4F68 |
:1024A000808191813F932F939F938F938BE393E050 |
:1024B0009F938F931F930E94400988E28093C701E6 |
:1024C000E091E904FF27EE0FFF1FE854FB4F208146 |
:1024D0003181E091E804FF27EE0FFF1FE854FB4F26 |
:1024E000808191813F932F939F938F938BE293E011 |
:1024F0009F938F931F930E9440098CE38093C701A1 |
:10250000E091EA04FF27EE0FFF1FE854FB4F8081A4 |
:1025100091819F938F938BE193E09F938F931F9370 |
:102520000E9440098DB79EB74A96C8CE1092C70147 |
:102530008DE093E09F938F9311E01F930E944009D9 |
:1025400084E18093C7012091D2013091D301809121 |
:10255000AD019091AE016091B9013F932F93772720 |
:102560000E944C2E7F936F938EEF92E09F938F93F8 |
:102570001F930E94400988E28093C7012091D401F3 |
:102580003091D5018091AF019091B0016091BA0175 |
:102590003F932F9377270E944C2E7F936F938FEE5C |
:1025A00092E09F938F931F930E9440098CE3809346 |
:1025B000C7012091D6013091D7018091B10190914E |
:1025C000B2016091BB013F932F9377270E944C2E5D |
:1025D0007F936F9380EE92E09F938F931F935BC0E6 |
:1025E0001092C70183ED92E09F938F9381E0F82EC4 |
:1025F000FF920E94400984E18093C7012091D80195 |
:102600003091D9018091B5019091B6016091BC01E2 |
:102610003F932F9377270E944C2E7F936F9384ECE8 |
:1026200092E09F938F93FF920E94400988E28093EB |
:10263000C7012091DA013091DB018091B3019091C3 |
:10264000B4016091BD013F932F9377270E944C2ED8 |
:102650007F936F9385EB92E09F938F93FF920E94FD |
:1026600040098CE38093C7016091DC017091DD012A |
:102670008091DE019091DF010091890410918A041C |
:102680000E943A2D7F936F931F930F9386EA92E0F7 |
:102690009F938F93FF920E9440098DB79EB74896F3 |
:1026A0000DCE84E18093C7018091060190910701CE |
:1026B0009F938F9387E992E09F938F9311E01F93ED |
:1026C0000E94400988E28093C701809122029927E5 |
:1026D0009F938F9388E892E09F938F931F930E941C |
:1026E00040098DB79EB70A96E9CD1092C70189E7D8 |
:1026F00092E09F938F9311E01F930E94400984E121 |
:102700008093C70180911602909117029F938F9337 |
:102710008AE692E09F938F931F930E94400988E27C |
:102720008093C70180911202909113029F938F931F |
:102730008BE592E09F938F931F930E9440098CE357 |
:102740008093C70180911402909115029F938F93FB |
:102750008CE492E0B2C01092C70180911A0290916D |
:102760001B029F938F9380E492E09F938F9311E0DD |
:102770001F930E94400984E18093C70180911C024D |
:1027800090911D029F938F9384E392E09F938F9388 |
:102790001F930E94400988E28093C70180911E0226 |
:1027A00090911F029F938F9388E292E09F938F9363 |
:1027B0001F930E9440098CE38093C70180912002FF |
:1027C000909121029F938F938CE192E06FCD1092B4 |
:1027D000C70184E192E09F938F9311E01F930E94C1 |
:1027E000400984E18093C70180918B0199279F93D1 |
:1027F0008F9386E092E09F938F931F930E944009EE |
:1028000088E28093C7018091A8019091A9019F93CC |
:102810008F9388EF91E09F938F931F930E944009BD |
:102820008CE38093C7018091080599279F938F932C |
:102830008091070599279F938F938AEE91E09F934C |
:102840008F931F930E94400936CD1092C7018FEDE0 |
:1028500091E09F938F9311E01F930E94400984E1C0 |
:102860008093C70180919A04992787FD90959F9343 |
:102870008F9380ED91E09F938F931F930E94400967 |
:1028800088E28093C70180919B04992787FD9095EA |
:102890009F938F9381EC91E09F938F931F930E945E |
:1028A00040098CE38093C70180919904992787FDA3 |
:1028B00090959F938F9382EB91E09F938F931F93BB |
:1028C0000E9440098DB79EB74296F8CC8150809304 |
:1028D00068011092C9011092C8011F910F91FF90D9 |
:1028E00008951F920F920FB60F9211242F933F93CA |
:1028F0004F938F939F9380919C04843021F0883074 |
:1029000009F095C023C080919F04803149F48EB5B1 |
:102910009927982F88279093A1048093A00413C02F |
:10292000803249F48EB59927982F88279093A50473 |
:102930008093A40408C08EB59927982F8827909378 |
:10294000A9048093A8041EBC88E06FC080919F04F6 |
:10295000803111F58EB5282F33278091A0049091F6 |
:10296000A104282B392B3093A1042093A004C90182 |
:102970008D509E4F875E934028F43093A30420939C |
:10298000A20408C08091A2049091A3049093A10492 |
:102990008093A00480E223C0803231F58EB5282FC9 |
:1029A00033278091A4049091A504282B392B3093D0 |
:1029B000A5042093A404C9018D509E4F875E9340C7 |
:1029C00028F43093A7042093A60408C08091A6049D |
:1029D0009091A7049093A5048093A40480E480932D |
:1029E0009F0410929C0423C08EB5282F332780911A |
:1029F000A8049091A904282B392B3093A904209383 |
:102A0000A804C9018D509E4F875E934028F43093EF |
:102A1000AB042093AA0408C08091AA049091AB044F |
:102A20009093A9048093A80480E880939C049F91CC |
:102A30008F914F913F912F910F900FBE0F901F904C |
:102A40001895A0E1B0E0E7E2F5E10C949C2E8091AE |
:102A5000AC049091AD040E94BB1769877A878B877D |
:102A60009C878091AC049091AD040E941F185B017B |
:102A70006C018091AE049091AF040E94BB176D83EE |
:102A80007E838F8398878091AE049091AF040E94DB |
:102A90001F1869837A838B839C8320919B0433273F |
:102AA00027FD30956091A4047091A504621B730BFF |
:102AB000882777FD8095982F0E94572D1B012C01A8 |
:102AC00020919904332727FD30956091A8047091D7 |
:102AD000A904621B730B882777FD8095982F0E94AD |
:102AE000572D3B014C01A201910169817A818B81B3 |
:102AF0009C810E94D12D7B018C01A40193016D81E9 |
:102B00007E818F8198850E94D12D9B01AC01C801E7 |
:102B1000B7010E94B22C0E943A2D6D877E878F8765 |
:102B2000988B20919A04332727FD30956091A0045B |
:102B30007091A104621B730B882777FD8095982FF5 |
:102B40000E94572D9B01AC01C601B5010E94D12DF9 |
:102B50005B016C01A20191016D817E818F8198855D |
:102B60000E94D12D7B018C01A401930169817A819E |
:102B70008B819C810E94D12D9B01AC01C801B701C2 |
:102B80000E94B12C29853A854B855C850E94D12D08 |
:102B90009B01AC01C601B5010E94B22C0E943A2DE6 |
:102BA000DC01CB016D857E850E94FF16E2E1C05FEE |
:102BB0000C94B82E80919C04813059F0813030F013 |
:102BC000823001F1803809F063C029C02A9A81E07F |
:102BD00023C02A9880919F04803111F481E307C0BB |
:102BE000803211F482E303C0803411F483E38EBD9C |
:102BF00088E090E00E94B90B90939E0480939D041E |
:102C000082E00AC080919D0490919E040E94C20BB4 |
:102C10008823F1F11EBC84E080939C0408956091A8 |
:102C2000E2017091E3018091E4019091E50120912E |
:102C300001053327E3E0220F331FEA95E1F744272C |
:102C400037FD4095542F0E94812E3093AD04209380 |
:102C5000AC046091EA017091EB018091EC019091DC |
:102C6000ED0120910205332753E0220F331F5A95BF |
:102C7000E1F7442737FD4095542F0E94812E309371 |
:102C8000AF042093AE0480E180939F0410929C04D3 |
:102C9000089583ED8CBD84B1846A84B95B9880E12A |
:102CA00080939F0410929C04A5EFB1E00E94D92E5E |
:102CB000802D80939A04A6EFB1E00E94D92E802D3A |
:102CC00080939B04A7EFB1E00E94D92E802D8093C2 |
:102CD00099040895A0E0B0E0E0E7F6E10C949E2EA0 |
:102CE000EE24FF2400E010E0AA24BB24CC24DD2441 |
:102CF000662477248824992482E3482E55248091E1 |
:102D0000A0049091A1040817190714F48C0104C0C1 |
:102D10008E159F050CF47C018091A4049091A5046C |
:102D2000C816D90614F46C0104C08A159B050CF46E |
:102D30005C018091A8049091A9048816990614F466 |
:102D40004C0104C0861597050CF43C01552041F454 |
:102D500082E390E09093A7018093A601B2E35B2EFB |
:102D60008AE090E00E94B90BEC01CE010E94C20BF8 |
:102D70008823D9F3E091E604FF27EE0FFF1FE85404 |
:102D8000FB4F80819181843691050CF44A94442054 |
:102D900011F05A94B4CFC8018E0D9F1D62E070E00F |
:102DA0000E944C2E9B0160939A04C6018A0D9B1DC4 |
:102DB00062E070E00E944C2E60939B04C401860D7B |
:102DC000971D62E070E00E944C2E60939904A5EF7D |
:102DD000B1E0022E0E94E12E80919B04A6EFB1E0AB |
:102DE000082E0E94E12E80919904A7EFB1E0082EF1 |
:102DF0000E94E12EE0E1CDB7DEB70C94BA2EA0E040 |
:102E0000B0E0E5E0F7E10C94A52EEC016B01892B15 |
:102E100029F4672B19F480E090E09EC0D7FC03C032 |
:102E200091E0B92E02C08FEFB82E209731F48AE5D9 |
:102E30002B2D2802C00111248FC0B601882777FDF1 |
:102E40008095982F0E94572D7B018C01BE01882709 |
:102E500077FD8095982F0E94572D9B01AC01C801EA |
:102E6000B7010E94F42C20E030E048E452E40E94D4 |
:102E7000D12D0E943A2DFB0177FF03C0F095E1951B |
:102E8000FF4F31E0EE30F30734F4E25AFB4F849108 |
:102E9000682F772747C086E1E737F8071CF06AE517 |
:102EA00070E040C027E0E637F2071CF069E570E00B |
:102EB00039C034E0EE37F3071CF068E570E032C04B |
:102EC00083E0E433F8071CF067E570E02BC022E0F4 |
:102ED000E038F2071CF066E570E024C032E0E8302C |
:102EE000F3071CF065E570E01DC081E0E83BF807E2 |
:102EF0001CF064E570E016C021E0EC37F2071CF02E |
:102F000063E570E00FC031E0EF34F3071CF062E5D9 |
:102F100070E008C0EB52F1401CF061E570E002C0C7 |
:102F200060E570E01C161D066CF48B2D992787FD5B |
:102F300090959C01629FC001639F900D729F900DC0 |
:102F400011240AC0D7FC05C084EB90E0861B970BC8 |
:102F500003C0CB01845B9040E9E0CDB7DEB70C94B1 |
:102F6000C12EFC0125913491FC013296459154917A |
:102F7000CA01B9010895A0E0B0E0E1ECF7E10C94DA |
:102F8000A62E9C0197FD04C061E0C62ED12C06C080 |
:102F9000309521953F4F5FEFC52ED52EC9018B553A |
:102FA00090408A35910530F484EB90E0821B930BBE |
:102FB0009C010FC0C901855B90408A35910518F4CA |
:102FC000245B30400EC0C9018F5091408A35910575 |
:102FD00018F0C1E0D0E007C088E691E0821B930BB7 |
:102FE0009C01CFEFDFEF220F331F220F331FC901E8 |
:102FF00084599A4F0E94B1177B018C01B601882732 |
:1030000077FD8095982F0E94572D9B01AC01C80138 |
:10301000B7010E94D12D7B018C01BE01882777FD6D |
:103020008095982F0E94572D9B01AC01C801B701D4 |
:103030000E94D12DE8E0CDB7DEB70C94C22E2AE570 |
:1030400030E0281B390BC9010E94BB170895FC0111 |
:1030500097FD02C091E004C0F095E195FF4F9FEF0E |
:10306000E852F94F8491989F802D1124992787FD6C |
:10307000909508951092B9008AE28093B80008955F |
:1030800085EA8093BC0080E090E0089584E9809315 |
:10309000BC0008951092B9008093BB0085E880932E |
:1030A000BC0080E090E008951F920F920FB60F923F |
:1030B00011248F939F93EF93FF938091CA018F5FA9 |
:1030C0008093CA018150E82FFF27E830F10508F00E |
:1030D00074C0E05AFF4F0C94D32E8091CB01880F1F |
:1030E0008E5A14C08091CB018F5F8093CB018150A9 |
:1030F000813009F444C0813038F0823009F442C094 |
:10310000833009F05AC041C080916B021092B9001F |
:103110008093BB0085E88093BC004FC084E9809316 |
:10312000BC008091CB01843018F41092CA0102C017 |
:103130001092CB0185EAEFCF8091CC01880F8D5A98 |
:10314000E5CF8091CC018130D1F08130E8F282303E |
:10315000C9F0833091F519C08091BB00E091CC019A |
:10316000FF27E055FB4F80838091CC01813039F0FF |
:10317000813050F2823031F08330F9F406C0809112 |
:103180006C02C4CF80916F02C1CF80917102BECF1B |
:103190008091CC019091BB00E82FFF27E055FB4FB9 |
:1031A00094838F5F8093CC01843010F01092CC0117 |
:1031B00084E98093BC001092CA01FF91EF919F9126 |
:1031C0008F910F900FBE0F901F90189583EC8093F6 |
:1031D0008100EFE6F0E08081806280831092D70169 |
:1031E0001092D6011092D5011092D4011092D30101 |
:1031F0001092D20108951F920F920FB60F921124D0 |
:103200000F931F932F933F934F935F936F937F93EE |
:103210008F939F93AF93BF93CF93DF93EF93FF93DE |
:1032200020918600309187008091CF019091D0014C |
:10323000281B390B80918600909187009093D001D4 |
:103240008093CF01C9018D5D95408356994148F423 |
:1032500081E090E09093CE018093CD0110926901BE |
:1032600054C0C091CD01D091CE01CA30D1050CF02F |
:103270004CC0C9018B5F9040845B914008F040C016 |
:10328000A901425D5140FE01EE0FFF1FE854FB4FC4 |
:1032900080819181FA01E81BF90BCF01F7FF03C090 |
:1032A000909581959F4F06974CF480912202883C1F |
:1032B00028F480912202865F80932202FE01EE0FA5 |
:1032C000FF1F8F0108541B4FD8012D913C91C9015C |
:1032D000880F991F820F931F840F951F64E070E081 |
:1032E0000E944C2ED8018D919C9111979B01281B17 |
:1032F000390BE253FB4F3183208311967C936E93FD |
:103300002196D093CE01C093CD01FF91EF91DF9133 |
:10331000CF91BF91AF919F918F917F916F915F916D |
:103320004F913F912F911F910F910F900FBE0F90D2 |
:103330001F901895AF92BF92CF92DF92EF92FF92BB |
:103340000F931F9310927A008091B901882369F03E |
:103350008091AD019091AE016091B90177270E94F3 |
:103360004C2E70932105609320058091BA0188232B |
:1033700069F08091AF019091B0016091BA01772717 |
:103380000E944C2E70931F0560931E058091BB0117 |
:10339000882369F08091B1019091B2016091BB01E5 |
:1033A00077270E944C2E70932D0560932C058091F9 |
:1033B000BC018823D9F1E0902905F0902A0560919D |
:1033C000B5017091B6012091BC010027F7FC009572 |
:1033D000102F5701680143E0AA0CBB1CCC1CDD1C5C |
:1033E0004A95D1F7AE18BF08C00AD10A882777FDE1 |
:1033F0008095982F34E0660F771F881F991F3A95A4 |
:10340000D1F73327442755270E94812EA20EB31EE1 |
:10341000C41ED51EC601B50128E030E040E050E0F2 |
:103420000E94812E30932A05209329058091BD01A9 |
:103430008823D9F1E0903205F09033056091B30113 |
:103440007091B4012091BD010027F7FC0095102F69 |
:103450005701680183E0AA0CBB1CCC1CDD1C8A95BB |
:10346000D1F7AE18BF08C00AD10A882777FD80952A |
:10347000982FB4E0660F771F881F991FBA95D1F770 |
:103480003327442755270E94812EA20EB31EC41E47 |
:10349000D51EC601B50128E030E040E050E00E94B2 |
:1034A000812E30933305209332058091BE0188230D |
:1034B000A1F1E0902305F09024056091B70170918F |
:1034C000B8012091BE010027F7FC0095102F57018D |
:1034D0006801A3E0AA0CBB1CCC1CDD1CAA95D1F78B |
:1034E000AE18BF08C00AD10A882777FD8095982FAB |
:1034F0003327442755270E94812EA20EB31EC41ED7 |
:10350000D51EC601B50128E030E040E050E00E9441 |
:10351000812E30932405209323051092AE01109242 |
:10352000AD011092B9011092B0011092AF0110924A |
:10353000BA011092B2011092B1011092BB01109227 |
:10354000B4011092B3011092BD011092B601109215 |
:10355000B5011092BC011092B8011092B7011092FF |
:10356000BE018091060290910702A0910802B091DD |
:1035700009028093F2019093F301A093F401B093B8 |
:10358000F5018091F6019091F701A091F801B091B9 |
:10359000F9018093E2019093E301A093E401B093D9 |
:1035A000E5018091FE019091FF01A0910002B09190 |
:1035B00001028093EA019093EB01A093EC01B09398 |
:1035C000ED018091FA019091FB01A091FC01B09175 |
:1035D000FD018093E6019093E701A093E801B09389 |
:1035E000E9018091020290910302A0910402B0913E |
:1035F00005028093EE019093EF01A093F001B09348 |
:10360000F1018FEE80937A00809120059091210541 |
:10361000893C91057CF02091200530912105809115 |
:10362000200590912105880F991F880F991F20521E |
:10363000334015C0809120059091210588539F4FFC |
:10364000A4F42091200530912105809120059091CE |
:103650002105880F991F880F991F205E3C4F820F0C |
:10366000931F909321058093200580911E059091D2 |
:103670001F05893C91057CF020911E0530911F05A6 |
:1036800080911E0590911F05880F991F880F991F23 |
:103690002052334015C080911E0590911F0588531C |
:1036A0009F4FA4F420911E0530911F0580911E05A7 |
:1036B00090911F05880F991F880F991F205E3C4F1E |
:1036C000820F931F90931F0580931E0520911A026D |
:1036D00030911B028091E804E82FFF27EE0FFF1FB7 |
:1036E000E854FB4F8081918182599F4F28173907F9 |
:1036F0001CF42F5F3F4F0CC08081918182599F4FF6 |
:10370000821793074CF42115310531F021503040D8 |
:1037100030931B0220931A0220911C0230911D024B |
:103720008091E904E82FFF27EE0FFF1FE854FB4FBD |
:103730008081918182599F4F281739071CF42F5F90 |
:103740003F4F0CC08081918182599F4F8217930710 |
:103750004CF42115310531F02150304030931D02D9 |
:1037600020931C0220911E0230911F028091EA04D6 |
:10377000E82FFF27EE0FFF1FE854FB4F8081918158 |
:1037800082599F4F281739071CF42F5F3F4F0CC0F9 |
:103790008081918182599F4F821793074CF42115A4 |
:1037A000310531F02150304030931F0220931E022A |
:1037B00020912002309121028091EB04E82FFF2715 |
:1037C000EE0FFF1FE854FB4F8081918182599F4F7C |
:1037D000281739071CF42F5F3F4F0CC0808191815F |
:1037E00082599F4F821793074CF42115310531F010 |
:1037F00021503040309321022093200280911A0200 |
:1038000090911B0297FF05C010921B0210921A02A2 |
:103810000AC08F3F910539F034F08FEF90E090931C |
:103820001B0280931A0280911C0290911D0297FF47 |
:1038300005C010921D0210921C020AC08F3F910514 |
:1038400039F034F08FEF90E090931D0280931C02CA |
:1038500080911E0290911F0297FF05C010921F02D7 |
:1038600010921E020AC08F3F910539F034F08FEF9D |
:1038700090E090931F0280931E028091200290910D |
:10388000210297FF05C010922102109220020AC067 |
:103890008F3F910539F034F08FEF90E09093210243 |
:1038A000809320021F910F91FF90EF90DF90CF90B7 |
:1038B000BF90AF90089510927A008091B90188234B |
:1038C00069F08091AD019091AE016091B9017727C7 |
:1038D0000E944C2E70932105609320058091BA01BF |
:1038E000882369F08091AF019091B0016091BA0195 |
:1038F00077270E944C2E70931F0560931E058091C0 |
:10390000BB01882369F08091B1019091B20160916F |
:10391000BB0177270E944C2E70932D0560932C05D8 |
:103920008091BC018823D1F06091B5017091B601FE |
:103930002091BC01882777FD8095982F34E0660F91 |
:10394000771F881F991F3A95D1F7332744275527AA |
:103950000E94812E30932A05209329058091BD0174 |
:103960008823D1F06091B3017091B4012091BD0121 |
:10397000882777FD8095982FB4E0660F771F881F02 |
:10398000991FBA95D1F73327442755270E94812ED6 |
:1039900030933305209332058091BE01882399F03E |
:1039A0006091B7017091B8012091BE01882777FD21 |
:1039B0008095982F3327442755270E94812E3093D6 |
:1039C0002405209323051092AE011092AD011092B0 |
:1039D000B9011092B0011092AF011092BA01109289 |
:1039E000B2011092B1011092BB011092B401109279 |
:1039F000B3011092BD011092B6011092B501109260 |
:103A0000BC011092B8011092B7011092BE018FEE66 |
:103A100080937A0020911A0230911B028091E80471 |
:103A2000E82FFF27EE0FFF1FE854FB4F80819181A5 |
:103A300082599F4F281739071CF42F5F3F4F0CC046 |
:103A40008081918182599F4F821793074CF42115F1 |
:103A5000310531F02150304030931B0220931A027F |
:103A600020911C0230911D028091E904E82FFF276C |
:103A7000EE0FFF1FE854FB4F8081918182599F4FC9 |
:103A8000281739071CF42F5F3F4F0CC080819181AC |
:103A900082599F4F821793074CF42115310531F05D |
:103AA0002150304030931D0220931C0220911E02B1 |
:103AB00030911F028091EA04E82FFF27EE0FFF1FCD |
:103AC000E854FB4F8081918182599F4F2817390715 |
:103AD0001CF42F5F3F4F0CC08081918182599F4F12 |
:103AE000821793074CF42115310531F021503040F5 |
:103AF00030931F0220931E02209120023091210258 |
:103B00008091EB04E82FFF27EE0FFF1FE854FB4FD7 |
:103B10008081918182599F4F281739071CF42F5FAC |
:103B20003F4F0CC08081918182599F4F821793072C |
:103B30004CF42115310531F02150304030932102F1 |
:103B40002093200280911A0290911B0297FF05C0DA |
:103B500010921B0210921A020AC08F3F910539F091 |
:103B600034F08FEF90E090931B0280931A028091C3 |
:103B70001C0290911D0297FF05C010921D02109229 |
:103B80001C020AC08F3F910539F034F08FEF90E0AE |
:103B900090931D0280931C0280911E0290911F023F |
:103BA00097FF05C010921F0210921E020AC08F3F9D |
:103BB000910539F034F08FEF90E090931F028093DD |
:103BC0001E02809120029091210297FF05C0109261 |
:103BD00021021092200208958F3F910539F034F0B0 |
:103BE0008FEF90E0909321028093200208951F931D |
:103BF0008091EF048B3F98F08B3F19F480911A026B |
:103C00000EC08C3F19F480911C0209C08D3F19F43D |
:103C100080911E0204C08E3F21F480912002809387 |
:103C2000830180918301882319F41092830104C0D9 |
:103C30008F3F11F4809383018091EE048B3F98F0C5 |
:103C40008B3F19F480911A020EC08C3F19F48091B9 |
:103C50001C0209C08D3F19F480911E0204C08E3FE2 |
:103C600021F4809120028093820180918201882337 |
:103C700019F41092820105C0843618F084E680930E |
:103C800082018091F0048B3F98F08B3F19F4809172 |
:103C90001A020EC08C3F19F480911C0209C08D3F9E |
:103CA00019F480911E0204C08E3F21F480912002FD |
:103CB0008093840180918401882319F410928401F7 |
:103CC00005C0843618F084E6809384018091F20464 |
:103CD0008B3F98F08B3F19F480911A020EC08C3FF5 |
:103CE00019F480911C0209C08D3F19F480911E02C5 |
:103CF00004C08E3F21F48091200280938501809141 |
:103D00008501882319F41092850104C08F3F11F4B6 |
:103D1000809385018091F9048B3F98F08B3F19F4D3 |
:103D200080911A020EC08C3F19F480911C0209C0C8 |
:103D30008D3F19F480911E0204C08E3F21F48091C2 |
:103D400020028093860180918601882319F41092C5 |
:103D5000860104C08F3F11F4809386018091FA049C |
:103D60008B3F98F08B3F19F480911A020EC08C3F64 |
:103D700019F480911C0209C08D3F19F480911E0234 |
:103D800004C08E3F21F480912002809387018091AE |
:103D900087018B3010F48AE002C08F3F11F48093CA |
:103DA00087018091FB048B3F98F08B3F19F4809141 |
:103DB0001A020EC08C3F19F480911C0209C08D3F7D |
:103DC00019F480911E0204C08E3F21F480912002DC |
:103DD0008093880180918801882319F410928801CA |
:103DE00004C08F3F11F480938801809100058B3FC0 |
:103DF00098F08B3F19F480911A020EC08C3F19F491 |
:103E000080911C0209C08D3F19F480911E0204C0EC |
:103E10008E3F21F48091200280938A0180918A0153 |
:103E2000882319F410928A0104C08F3F11F4809303 |
:103E30008A01809101058B3F98F08B3F19F48091A6 |
:103E40001A020EC08C3F19F480911C0209C08D3FEC |
:103E500019F480911E0204C08E3F21F4809120024B |
:103E600080932E0280912E02882319F410922E0244 |
:103E700004C08F3F11F480932E02809102058B3F86 |
:103E800098F08B3F19F480911A020EC08C3F19F400 |
:103E900080911C0209C08D3F19F480911E0204C05C |
:103EA0008E3F21F48091200280932F0280912F0277 |
:103EB000882319F410922F0204C08F3F11F48093CD |
:103EC0002F02809103058B3F98F08B3F19F480916E |
:103ED0001A020EC08C3F19F480911C0209C08D3F5C |
:103EE00019F480911E0204C08E3F21F480912002BB |
:103EF0008093300280913002882319F410923002AE |
:103F000004C08F3F11F480933002809104058B3FF1 |
:103F100098F08B3F19F480911A020EC08C3F19F46F |
:103F200080911C0209C08D3F19F480911E0204C0CB |
:103F30008E3F21F4809120028093310280913102E2 |
:103F4000882319F41092310204C08F3F11F480933A |
:103F50003102909105059B3FB0F09B3F19F4809191 |
:103F60001A0204C09C3F29F480911C0280938B01AB |
:103F70000CC09D3F19F480911E02F8CF9E3F29F49A |
:103F800080912002F3CF90938B0180918B01882345 |
:103F900019F410928B0104C08F3F11F480938B01B0 |
:103FA0009B3FB0F09B3F19F480911A0204C09C3FE4 |
:103FB00029F480911C0280938B010CC09D3F19F461 |
:103FC00080911E02F8CF9E3F29F480912002F3CF0A |
:103FD00090938B0180918B01882319F410928B01AF |
:103FE00004C08F3F11F480938B019B3FB0F09B3F47 |
:103FF00019F480911A0204C09C3F29F480911C029C |
:1040000080938B010CC09D3F19F480911E02F8CF64 |
:104010009E3F29F480912002F3CF90938B018091F1 |
:104020008B01882319F410928B0104C08F3F11F487 |
:1040300080938B0110918A01612F772767FD70951E |
:10404000872F972F0E94572D17FF06C020E030E0E2 |
:1040500040E853E40E94B22C27E137EB41ED58E3EE |
:104060000E94D12D60937E0170937F018093800127 |
:10407000909381018091F70480932B058091F60441 |
:10408000809322051F91089581E08093E40442E02B |
:104090004093E50483E08093E60494E09093E70482 |
:1040A00035E03093E80486E08093E90487E080936C |
:1040B000EA041092EC048EE18093ED048BEF809380 |
:1040C000EF048AE08093F00422E32093EE0420932F |
:1040D000F2044093F1049093F3041092F40490E1FD |
:1040E0009093F5048FE08093F6048AEF8093F704B1 |
:1040F0008AE18093F8049093F9048FEA8093FA049C |
:104100008093FB048AE58093FC0483E28093FD04A2 |
:1041100084E18093FE041092FF043093000588E749 |
:104120008093010580930205109203051092040507 |
:1041300084E68093050588E28093060510920A05BF |
:104140002093070586E98093080530930905A2E1CD |
:10415000B5E0EAE6F1E08CE001900D928150E1F7E4 |
:10416000089581E08093E40452E05093E50483E0F5 |
:104170008093E60444E04093E70435E03093E8049C |
:1041800086E08093E90487E08093EA0428E02093A6 |
:10419000EB041092EC049EE19093ED048BEF80937E |
:1041A000EF048AE08093F00486E48093EE04909319 |
:1041B000F2045093F1044093F3042093F40490E14B |
:1041C0009093F5048FE08093F6048AEF8093F704D0 |
:1041D0008AE18093F8049093F90498E79093FA04A5 |
:1041E00026E92093FB048AE58093FC0483E2809314 |
:1041F000FD0484E18093FE041092FF0430930005D7 |
:104200009093010590930205109203051092040506 |
:1042100084E68093050588E28093060510920A05DE |
:1042200082E3809307052093080530930905A2E1F6 |
:10423000B5E0E2E7F1E08CE001900D928150E1F70A |
:10424000089580912902882301F510926C02109242 |
:104250006B0210926F021092710280919601882376 |
:1042600011F080936B0280919701882311F0809365 |
:104270006C0280919801882311F0809371028091E3 |
:104280009901882311F080936F0280916B02992726 |
:1042900090937F0480937E0480916C029927909381 |
:1042A0008104809380048091710299279093830404 |
:1042B0008093820480916F02992790938504809364 |
:1042C00084041092CA011092CB010E9440180895F4 |
:1042D000CF93DF931092D9011092D8011092DB0195 |
:1042E0001092DA0180E090E0A0E0B0E08093DC0181 |
:1042F0009093DD01A093DE01B093DF011092D30112 |
:104300001092D2011092D5011092D4011092D701CF |
:104310001092D6010E945B1C85E090E00E94B90BD0 |
:10432000EC01CE010E94C20B8823D9F30E945B1CD2 |
:104330008091EC0480FF10C080910C0190910D01E0 |
:10434000875B934038F480910C0190910D018E5E53 |
:10435000924010F40E945C108091200590912105FC |
:1043600097FF03C0909581959F4F9093D3018093C1 |
:10437000D20180911E0590911F0597FF03C0909573 |
:1043800081959F4F9093D5018093D40180912C0506 |
:1043900090912D0597FF03C0909581959F4F909325 |
:1043A000D7018093D601809132059091330597FF14 |
:1043B00003C0909581959F4F60E170E00E944C2E64 |
:1043C0007093DB016093DA018091290590912A05B1 |
:1043D00097FF03C0909581959F4F60E170E00E9428 |
:1043E0004C2E7093D9016093D8016091890470912B |
:1043F0008A04882777FD8095982F0E94572D609317 |
:10440000DC017093DD018093DE019093DF01109257 |
:10441000F6011092F7011092F8011092F901109232 |
:10442000FA011092FB011092FC011092FD01109212 |
:10443000FE011092FF0110920002109201021092F0 |
:1044400002021092030210920402109205021092CE |
:1044500006021092070210920802109209021092AE |
:1044600021051092200510921F0510921E05109232 |
:104470002D0510922C058091080190910901A091C1 |
:104480000A01B0910B0190938C0480938B041092DD |
:10449000C0011092BF0110920E0210920F021092F2 |
:1044A00010021092110280911202909113029093C7 |
:1044B0001502809314020E947A2C82E390E090937C |
:1044C000A7018093A601DF91CF9108951F93182F24 |
:1044D0000EC080912902882361F484E690E09093D5 |
:1044E000A7018093A6018AEF90E00E942E0D115043 |
:1044F00080F71F910895A8E0B0E0E1E8F2E20C94A3 |
:104500009C2E0E949A19299AE091E604AE2FBB27AF |
:10451000AA0FBB1FA854BB4F0D90BC91A02D9D01AD |
:1045200028583F4F3A83298337FF02C01A821982E5 |
:1045300080912202843608F04AC0809101018823CC |
:1045400031F484EF91E09093A7018093A6018091CC |
:104550003B0290913C02009731F0019790933C020E |
:1045600080933B0204C01092290210921802289AEC |
:104570008091360290913702815D974028F18091B9 |
:10458000FD04482F55275A83498381E08093180200 |
:10459000E091E404FF27EE0FFF1FE854FB4F118268 |
:1045A0001082E091E504FF27EE0FFF1FE854FB4F58 |
:1045B00011821082E091E704FF27EE0FFF1FE854FD |
:1045C000FB4F11821082CEC110922902CBC1809183 |
:1045D00022028D3808F4C6C1109218028091FE04A0 |
:1045E00022E3829FC001112490933C0280933B02FE |
:1045F00069817A81693271056CF0809136029091FF |
:1046000037027FEF8F3F970781F101969093370232 |
:10461000809336028091360290913702883C910552 |
:1046200020F089819A81889704F5109251021092A6 |
:104630005202109253021092540210924D021092A4 |
:104640004E0210924F0210925002109206021092E7 |
:104650000702109208021092090210920A021092A8 |
:104660000B0210920C0210920D02E981FA81E93CD2 |
:10467000F1050CF4D6C080912902882309F072C19B |
:10468000E091E704FF27EE0FFF1FE854FB4F808106 |
:1046900091818C3491050CF4C1C080913A028F5FF6 |
:1046A00080933A02893C08F45DC129980E946821F0 |
:1046B0001092290210923A0210923702109236029A |
:1046C0008091E404282F3327F901EE0FFF1FE854EF |
:1046D000FB4F80819181873491059CF4E091E50442 |
:1046E000FF27EE0FFF1FE854FB4F0190F081E02DF4 |
:1046F000F7FF03C0F095E195FF4FE734F1050CF4A7 |
:104700006CC08091E504682F7727DB01AA0FBB1FDF |
:10471000A854BB4F8D919C911197873491053CF023 |
:10472000F901EE0FFF1FE854FB4F808191818D91BD |
:104730009C918734910564F0F901EE0FFF1FE85456 |
:10474000FB4F808191818734910514F042E001C0D4 |
:1047500041E0FB01EE0FFF1FE854FB4F8081918188 |
:10476000863491055CF4F901EE0FFF1FE854FB4F0E |
:1047700080819181873491050CF043E0FB01EE0FBD |
:10478000FF1FE854FB4F808191818A5B9F4F5CF44F |
:10479000F901EE0FFF1FE854FB4F808191818734B0 |
:1047A00091050CF044E0660F771F68547B4FFB01C6 |
:1047B000808191818A5B9F4F5CF4220F331F2854C4 |
:1047C0003B4FF90180819181863491050CF445E0DD |
:1047D000A2E0B0E0042E0E94E12E0E94F0034AE322 |
:1047E00064EE74E00E940F040E94F0030E946622AF |
:1047F0008091EC0480FFB6C080910C0190910D0176 |
:10480000875B934040F480910C0190910D018E5E86 |
:10481000924008F0A7C00E945C10A4C010923A0217 |
:10482000A1C049815A81433251050CF09BC080914F |
:10483000E704482F5527FA01EE0FFF1FE854FB4FFE |
:1048400080819181855B9F4F0CF06DC08091390212 |
:104850008F5F80933902893C08F467C088EC8093AD |
:10486000390281E090E0909337028093360281E034 |
:10487000809329021092490210924A0210924B0230 |
:1048800010924C0210920602109207021092080237 |
:104890001092090210920A0210920B0210920C025E |
:1048A00010920D021092F6011092F7011092F80189 |
:1048B0001092F9011092FE011092FF011092000275 |
:1048C000109201028091E2019091E301A091E40134 |
:1048D000B091E5018093FA019093FB01A093FC0154 |
:1048E000B093FD018091EA019091EB01A091EC0160 |
:1048F000B091ED018093020290930302A093040211 |
:10490000B09305021092510210925202109253027B |
:104910001092540210924D0210924E0210924F02C9 |
:104920001092500202C010923902440F551F485491 |
:104930005B4FFA01808191818C3491058CF08091DC |
:1049400038028F5F80933802893C60F01092290210 |
:1049500088EC80933802109237021092360202C01F |
:104960001092380280916901815080936901809191 |
:1049700069018F3F29F080911802882309F412C140 |
:104980000E94F71DE091E404FF27EE0FFF1FDF01F7 |
:10499000A854BB4F8D919C916091F3047727E2530B |
:1049A000FB4F208131814091F4045527FC01E69FA3 |
:1049B000C001E79F900DF69F900D1124F901E49F2F |
:1049C0009001E59F300DF49F300D1124820F931F4D |
:1049D0009093240280932302E091E504FF27EE0FD9 |
:1049E000FF1FDF01A854BB4F8D919C91E253FB4FF9 |
:1049F00020813181FC01E69FC001E79F900DF69F69 |
:104A0000900D1124B901649F9001659F300D749F32 |
:104A1000300D1124820F931F90932602809325025C |
:104A2000E091E704FF27EE0FFF1FE854FB4F808162 |
:104A30009181909581959F4F9093280280932702B2 |
:104A400010918701612F772767FD7095872F972F2A |
:104A50000E94572D17FF06C020E030E040E853E4E5 |
:104A60000E94B22C20E030E040E251E40E94B22CDF |
:104A700020E030E040E85BE30E94D12D3B014C0197 |
:104A800060932E0570932F05809330059093310528 |
:104A900010918801612F772767FD7095872F972FD9 |
:104AA0000E94572D17FF06C020E030E040E853E495 |
:104AB0000E94B22C20E030EE4BE257E40E94F42C2E |
:104AC000609325057093260580932705909328050C |
:104AD0008091EC0482FF0CC080E090E0A0E0B0E0A8 |
:104AE0008093250590932605A0932705B09328056C |
:104AF00020E030E040E050E0C401B3010E94612DAD |
:104B0000882364F480E090E0A0E0B0E080932E057C |
:104B100090932F05A0933005B093310520E030E04D |
:104B200040E050E0609125057091260580912705B1 |
:104B3000909128050E94612D882364F480E090E024 |
:104B4000A0E0B0E08093250590932605A09327056B |
:104B5000B093280580911802882321F11092280231 |
:104B60001092270210922402109223021092260221 |
:104B7000109225028DEC9CECACECBDE380932E05ED |
:104B800090932F05A0933005B09331058AE097EDFF |
:104B9000A3EABBE38093250590932605A093270500 |
:104BA000B09328058091C1019091C2018D5491402C |
:104BB00008F490C02091E6013091E7014091E801AE |
:104BC0005091E9018091E2019091E301A091E4010B |
:104BD000B091E501B901681B790B709340026093B5 |
:104BE0003F022091EE013091EF014091F001509190 |
:104BF000F1018091EA019091EB01A091EC01B0915B |
:104C0000ED01281B390B30933E0220933D02109298 |
:104C1000C2011092C101673A710534F08091D2014E |
:104C20009091D301019608C06A557F4F4CF4809152 |
:104C3000D2019091D30101979093D3018093D20137 |
:104C4000273A310534F08091D4019091D501019635 |
:104C500008C02A553F4F4CF48091D4019091D50162 |
:104C600001979093D5018093D40110927A0080919E |
:104C7000E2019091E301A091E401B091E5018093FC |
:104C8000FA019093FB01A093FC01B093FD01809188 |
:104C9000EA019091EB01A091EC01B091ED018093BC |
:104CA000020290930302A0930402B0930502809144 |
:104CB000F2019091F301A091F401B091F50180937C |
:104CC0000A0290930B02A0930C02B0930D028FEE98 |
:104CD00080937A006091E2017091E3018091E40198 |
:104CE0009091E501A090F804BB24CC24DD24E09051 |
:104CF0002905F0902A05A60195010E94812E002722 |
:104D0000F7FC0095102F2E193F09400B510BCA01DB |
:104D1000B90120E130E040E050E00E94812E3901ED |
:104D20004A01209345023093460240934702509334 |
:104D300048026091EA017091EB018091EC01909141 |
:104D4000ED01E0903205F0903305A60195010E9437 |
:104D5000812E0027F7FC0095102F2E193F09400BDC |
:104D6000510BCA01B90120E130E040E050E00E945F |
:104D7000812E20934102309342024093430250938C |
:104D80004402E5EF6E16E1E07E06E0E08E06E0E02C |
:104D90009E062CF084EF91E0A0E0B0E00DC0FCE0B6 |
:104DA0006F16FEEF7F06FFEF8F06FFEF9F0664F49E |
:104DB0008CE09EEFAFEFBFEF8093450290934602E9 |
:104DC000A0934702B0934802253F61E0360760E0B8 |
:104DD000460760E056072CF084EF91E0A0E0B0E0D9 |
:104DE00009C02C503E4F4F4F5F4F64F48CE09EEF54 |
:104DF000AFEFBFEF8093410290934202A093430232 |
:104E0000B093440210927A008091F6019091F701DC |
:104E1000A091F801B091F90120914502309146022C |
:104E20004091470250914802821B930BA40BB50B93 |
:104E30008093F6019093F701A093F801B093F901E4 |
:104E40008091FE019091FF01A0910002B0910102BA |
:104E5000209141023091420240914302509144021C |
:104E6000821B930BA40BB50B8093FE019093FF0163 |
:104E7000A0930002B0930102809127029091280232 |
:104E80009C01442737FD4095542F2B833C834D8351 |
:104E90005E832093490230934A0240934B02509321 |
:104EA0004C0297FF03C0909581959F4F84973CF0EB |
:104EB0008091EC0484FD03C081E080933202609015 |
:104EC00006027090070280900802909009028B8180 |
:104ED0009C8197FF03C0909581959F4F7C0100278F |
:104EE000F7FC0095102F2091F50433274427552710 |
:104EF0006B817C818D819E810E94192E9B01AC016A |
:104F0000C801B7010E94192E20E031E040E050E0D6 |
:104F10000E94812E442737FD4095542F621A730A50 |
:104F2000840A950A60920602709207028092080233 |
:104F3000909209028091060290910702A0910802C6 |
:104F4000B091090281539547A040B04064F080E3DE |
:104F500095E7A0E0B0E08093060290930702A0934B |
:104F60000802B09309028091060290910702A09175 |
:104F70000802B0910902805D9A48AF4FBF4F64F4B8 |
:104F800080ED9AE8AFEFBFEF80930602909307029F |
:104F9000A0930802B0930902EFEEE0937A008091AB |
:104FA000120290911302892B09F441C08091EC0404 |
:104FB00083FF3DC080913202882351F0809112021C |
:104FC0009091130290931502809314021092320272 |
:104FD00010927A00009106021091070220910802B7 |
:104FE000309109024091160250911702809186017A |
:104FF0009927BC01469FC001479F900D569F900D79 |
:10500000112460E270E00E944C2E882777FD809585 |
:10501000982F061B170B280B390B009306021093D1 |
:1050200007022093080230930902E0937A008091EE |
:1050300065048F5F80936504809133028150809373 |
:1050400033028F3F09F06BC081E38093330280917C |
:10505000AC049091AD0490936704809366048091B2 |
:10506000AE049091AF04909369048093680480919A |
:10507000290590912A0590936B0480936A0480918E |
:1050800032059091330590936D0480936C04809168 |
:105090002C0590912D0590936F0480936E04809160 |
:1050A0002A0290912B029093710480937004609176 |
:1050B0000E0270910F02809110029091110220E077 |
:1050C00032E040E050E00E94812E30937304209340 |
:1050D000720489819A8190937504809374048091FD |
:1050E000120290911302909377048093760480913A |
:1050F000A0049091A1049093790480937804809106 |
:10510000A4049091A50490937B0480937A048091E9 |
:10511000A8049091A90490937D0480937C046091ED |
:10512000E2017091E3018091E4019091E50120900A |
:105130002505309026054090270550902805E090E1 |
:105140002005F090210560902E0570902F0580902D |
:105150003005909031050E94572DA20191010E94C7 |
:10516000D12D5B016C010027F7FC0095102FC801C1 |
:10517000B7010E94572DA40193010E94D12D9B01DC |
:10518000AC01C601B5010E94B22C0E943A2D709369 |
:105190002105609320056091EA017091EB018091F7 |
:1051A000EC019091ED01E0901E05F0901F050E942A |
:1051B000572DA20191010E94D12D5B016C010027A6 |
:1051C000F7FC0095102FC801B7010E94572DA401CC |
:1051D00093010E94D12D9B01AC01C601B5010E9433 |
:1051E000B22C0E943A2D70931F0560931E056091AA |
:1051F0002C0570912D05A090F201B090F301C090A4 |
:10520000F401D090F501882777FD8095982F0E94B2 |
:10521000572D7B018C0120E030E040E05FE3C401CA |
:10522000B3010E94D12D9B01AC01C801B7010E94BE |
:10523000D12D7B018C01C601B5010E94572DA20121 |
:1052400091010E94D12D9B01AC01C801B7010E94C0 |
:10525000B22C0E943A2D70932D0560932C058091FD |
:105260002005909121058150984034F080E098E02D |
:105270009093210580932005809120059091210530 |
:105280008050984F34F480E098EF909321058093FC |
:10529000200580911E0590911F058150984034F0A3 |
:1052A00080E098E090931F0580931E0580911E0575 |
:1052B00090911F058050984F34F480E098EF9093C0 |
:1052C0001F0580931E0580912C0590912D0581501E |
:1052D000984034F080E098E090932D0580932C0561 |
:1052E00080912C0590912D058050984F34F480E0EA |
:1052F00098EF90932D0580932C058091EC049927CD |
:1053000080FFCDC02091830181FF0EC02233B0F415 |
:1053100080912A0290912B02449790932D028093C2 |
:105320002C02109219020DC08091F104289FC00137 |
:105330001124449790932D0280932C0281E0809356 |
:10534000190280911802882321F010922D021092E8 |
:105350002C0220912A0230912B0240912C02509174 |
:105360002D02421753070CF09AC08091190288232E |
:1053700009F495C0241B350B809184019927BC0149 |
:10538000269FC001279F900D369F900D112460E14C |
:1053900070E00E944C2E09811A81061B170B209188 |
:1053A000BF013091C001809182019927FC012E9F9D |
:1053B000C0012F9F900D3E9F900D112468E070E07A |
:1053C0000E944C2E061B170B60910E0270910F026B |
:1053D000809110029091110220E032E040E050E014 |
:1053E0000E94812ECA01B9012091850133274427EB |
:1053F00055270E94192E20E230E040E050E00E9444 |
:10540000812EFFEF2E3C3F0714F42EEC3FEF8091EE |
:10541000340290913502AC0174E0440F551F7A9527 |
:10542000E1F7481B590B2333310514F022E330E038 |
:10543000021B130BCA01800F911F60E170E00E94F4 |
:105440004C2E70933502609334028091ED049927BD |
:10545000681779078CF429813A81281739072CF0CD |
:10546000909335028093340207C049815A8150934A |
:105470003502409334020DC0809134029091350280 |
:1054800069817A816817790724F4709335026093F3 |
:10549000340280913402909135029A8389838090FE |
:1054A0002C0590902D05EB81FC818E1A9F0AF5E664 |
:1054B0008F16910424F064E6862E912C09C02CE905 |
:1054C00082162FEF920624F45CE9852E5FEF952E6D |
:1054D00040907A0150907B0160907C0170907D013A |
:1054E00060912005709121052091230230912402C2 |
:1054F0004091550250915602241B350B621B730BD1 |
:10550000882777FD8095982F0E94572D9B01AC012D |
:10551000C301B2010E94D12D0E943A2D70936E02F8 |
:1055200060936D0280916D0290916E028C01222732 |
:1055300017FD2095322F8091510290915202A09137 |
:105540005302B0915402080F191F2A1F3B1F0093EA |
:1055500051021093520220935302309354021016BA |
:10556000110612061306ACF4C80117FF03C090958C |
:1055700081959F4F60E071E00E944C2E6F5F7F4FDE |
:10558000882777FD8095982F061B170B280B390B62 |
:1055900014C0C80117FF03C0909581959F4F60E02C |
:1055A00071E00E944C2E6F5F7F4F882777FD8095BA |
:1055B000982F060F171F281F391F009351021093B1 |
:1055C00052022093530230935402809151029091E1 |
:1055D0005202A0915302B091540281383EE39307E6 |
:1055E00030E0A30730E0B3072CF080E89EE3A0E0B2 |
:1055F000B0E009C08058914CAF4FBF4F64F480E8D1 |
:1056000091ECAFEFBFEF8093510290935202A093C1 |
:105610005302B093540260916D0270916E02A0909B |
:105620007E01B0907F01C0908001D09081018827D9 |
:1056300077FD8095982F0E94572D7B018C016091FA |
:1056400051027091520280915302909154020E9433 |
:10565000572D9B01AC01C601B5010E94D12D9B01C4 |
:10566000AC01C801B7010E94B22C0E943A2D9401EE |
:10567000260F371F89819A81280F391F22240A9704 |
:1056800014F441E0242E37FD02C0222019F040E03E |
:1056900050E008C080912B05482F55272417350767 |
:1056A0000CF4A90180912205E82FFF27F887EF83EA |
:1056B0009F01E417F5070CF49A0120936B022981EE |
:1056C0003A81261B370BB901680D791D77FD02C0A1 |
:1056D000222019F080E090E007C080912B059927E7 |
:1056E000681779070CF4CB012F8138852817390703 |
:1056F0000CF49C0120936C0260911E0570911F05B3 |
:105700002091250230912602409157025091580273 |
:10571000241B350B621B730B882777FD8095982F10 |
:105720000E94572D9B01AC01C301B2010E94D12DF3 |
:105730000E943A2D70936A02609369028091690217 |
:1057400090916A028C01222717FD2095322F8091BB |
:105750004D0290914E02A0914F02B0915002080F5D |
:10576000191F2A1F3B1F00934D0210934E022093D6 |
:105770004F02309350021016110612061306ACF4B5 |
:10578000C80117FF03C0909581959F4F60E071E0BD |
:105790000E944C2E6F5F7F4F882777FD8095982F52 |
:1057A000061B170B280B390B14C0C80117FF03C0C9 |
:1057B000909581959F4F60E071E00E944C2E6F5F45 |
:1057C0007F4F882777FD8095982F060F171F281F7A |
:1057D000391F00934D0210934E0220934F023093D5 |
:1057E000500280914D0290914E02A0914F02B091D3 |
:1057F000500281383EE3930730E0A30730E0B3075F |
:105800002CF080E89EE3A0E0B0E009C08058914C05 |
:10581000AF4FBF4F64F480E891ECAFEFBFEF8093E0 |
:105820004D0290934E02A0934F02B09350026091AC |
:10583000690270916A02882777FD8095982F0E94EF |
:10584000572D7B018C0160914D0270914E02809129 |
:105850004F02909150020E94572D9B01AC01C6014E |
:10586000B5010E94D12D9B01AC01C801B7010E9476 |
:10587000B22C0E943A2D29813A81260F371F281910 |
:10588000390937FD02C0222019F040E050E008C07D |
:1058900080912B05482F5527241735070CF4A901B3 |
:1058A0002F813885241735070CF49A012093710253 |
:1058B00089819A81861B970BBC016819790977FD4C |
:1058C00002C0222019F020E030E008C080912B05B2 |
:1058D000282F3327621773070CF49B018F8198855B |
:1058E000821793070CF4C90180936F02E2E1C85F4D |
:1058F0000C94B82E8091590290915A02A0915B02AB |
:10590000B0915C028093610290936202A093630263 |
:10591000B093640280915D0290915E02A0915F025B |
:10592000B09160028093650290936602A093670233 |
:10593000B093680208951092560210925502109288 |
:105940005802109257020895FC014150504030F027 |
:1059500001900616D1F73197CF010895882799272E |
:1059600008955058192EEFD001D0D2C0BA1762074F |
:10597000730784079507B1F188F40EF410940B2E89 |
:10598000BA2FA02D062E622F202D072E732F302D1B |
:10599000082E842F402D092E952F502DFF2755239B |
:1059A000B9F0591B49F0573E98F046953795279521 |
:1059B000A795F0405395C9F776F0BA0F621F731F91 |
:1059C000841F30F4879577956795B795F040939548 |
:1059D00017FA0F2E0895BF1BBB27BA0B620B730B70 |
:1059E000840BF6CFDEF6DBC0AED001D091C05523DC |
:1059F00059F0992369F09F575F57951B33F442F490 |
:105A0000903811F4915805C09BC091589F3F09F4FC |
:105A1000C6C0BB27112462177307840730F4660FD2 |
:105A2000771F881FBB1F915098F311D00F920FD092 |
:105A30000F920DD0A0E82617370748071B0609F07C |
:105A4000A048BA2F602D7F918F9100240895A0E87F |
:105A50000024621773078407B10528F0621B730BDB |
:105A6000840BB1090A2A660F771F881FBB1FA695F2 |
:105A700081F7089597FB73D09F3738F0FEE9F91B43 |
:105A8000982F872F762F6B2F05C086C09695879508 |
:105A900077956795F150D0F73EF490958095709585 |
:105AA00061957F4F8F4F9F4F0895E89403C097FBF8 |
:105AB0000EF4F3DFB62F672F782F892F9EE900248D |
:105AC00027C00ED05EF004C00BD026F001C008D075 |
:105AD00019F020F48FEF089580E0089581E0089593 |
:105AE00097FB092E052600F8689430D0E89407FC4F |
:105AF00007C0621773078407950721F008F4009424 |
:105B00000794989408959A95BB0F661F771F881F76 |
:105B100011249923A1F08823B2F79F3F59F0BB0FBE |
:105B200048F421F4002011F460FF04C06F5F7F4F40 |
:105B30008F4F9F4F881F9795879597F908952CC091 |
:105B40009FEF80EC0895052E092607FA440F551F94 |
:105B50005F3F79F0AA27A51708F051E04795880F15 |
:105B6000991F9F3F31F0BB27B91708F091E0879547 |
:105B700008959F919F911124E3CF97FB880F991F60 |
:105B80009F3F31F0BB27B91708F091E08795089542 |
:105B90009F919F911124D4CF662777278827992733 |
:105BA0000895D1DF01D0B4CF992339F0552329F0DE |
:105BB0009F575F57950F13F49AF1F1CF91589F3F7C |
:105BC000E1F3629FA12D0F92BB27639FA00DB11D32 |
:105BD000EE27729FA00DB11DEE1FAF93AA27649F01 |
:105BE000B00DE11D739FB00DE11DAA1F6627829FB6 |
:105BF000B00DE11DA61F5527749FE00DA11D551F77 |
:105C0000839FE00DA11D561F849FA00D511D852F60 |
:105C10007A2F6E2F1F900F9088231AF4939539F4E2 |
:105C20008FCF000C111CBB1F661F771F881F012818 |
:105C30000895629FD001739FF001829FE00DF11DD6 |
:105C4000649FE00DF11D929FF00D839FF00D749FF6 |
:105C5000F00D659FF00D9927729FB00DE11DF91FA2 |
:105C6000639FB00DE11DF91FBD01CF0111240895FF |
:105C7000AA1BBB1B51E107C0AA1FBB1FA617B70772 |
:105C800010F0A61BB70B881F991F5A95A9F780958E |
:105C90009095BC01CD01089597FB092E07260AD0E7 |
:105CA00077FD04D0E5DF06D000201AF470956195E9 |
:105CB0007F4F0895F6F7909581959F4F0895A1E243 |
:105CC0001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F76 |
:105CD000FF1FA217B307E407F50720F0A21BB30BC1 |
:105CE000E40BF50B661F771F881F991F1A9469F73D |
:105CF00060957095809590959B01AC01BD01CF0199 |
:105D0000089597FB092E05260ED057FD04D0D7DF46 |
:105D10000AD0001C38F450954095309521953F4F9E |
:105D20004F4F5F4F0895F6F7909580957095619568 |
:105D30007F4F8F4F9F4F08952F923F924F925F92C8 |
:105D40006F927F928F929F92AF92BF92CF92DF928B |
:105D5000EF92FF920F931F93CF93DF93CDB7DEB7F0 |
:105D6000CA1BDB0B0FB6F894DEBF0FBECDBF099484 |
:105D70002A88398848885F846E847D848C849B84DB |
:105D8000AA84B984C884DF80EE80FD800C811B81E9 |
:105D9000AA81B981CE0FD11D0FB6F894DEBF0FBE18 |
:105DA000CDBFED010895EE0FFF1F0590F491E02D9A |
:105DB0000994F999FECFB2BDA1BDF89A119600B42D |
:105DC0000895F999FECFB2BDA1BD00BC11960FB6E2 |
:0C5DD000F894FA9AF99A0FBE0895FFCFDC |
:105DDC00016420030A016400007D0000FF0301023E |
:105DEC00030405060708090A48616C6C6F205765A7 |
:105DFC006C740000000000000000000000000000B7 |
:105E0C000000000000000000000000000000000086 |
:105E1C000000000000000000000000000000000076 |
:105E2C000000000000000000000000000000000066 |
:105E3C0000000000000000000B014B616D657261F9 |
:105E4C0000004E6F726D616C00000000803F17B750 |
:0C5E5C00D13830FB103A403296020A6444 |
:00000001FF |
/branches/v0.60_MicroMag3_Nick666/README.pdf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v0.60_MicroMag3_Nick666/compass.c |
---|
175,10 → 175,12 |
if (PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < 100) measurement--; |
} |
// Offset der Achsen berechnen |
X_off = (x_max + x_min) / 2; |
Y_off = (y_max + y_min) / 2; |
Z_off = (z_max + z_min) / 2; |
// und im EEProm abspeichern |
eeprom_write_byte(&Kompass_Offset[0], X_off); |
eeprom_write_byte(&Kompass_Offset[1], Y_off); |
eeprom_write_byte(&Kompass_Offset[2], Z_off); |
201,7 → 203,7 |
sin_roll = sin_f(MM3.RollGrad); |
cos_roll = cos_f(MM3.RollGrad); |
// Kompasskalibrierung berücksichtigen |
// Offset der Achsen nur bei Bedarf (also hier) berücksichtigen |
x_axis = MM3.x_axis - X_off; |
y_axis = MM3.y_axis - Y_off; |
z_axis = MM3.z_axis - Z_off; |
/branches/v0.60_MicroMag3_Nick666/fc.c |
---|
297,7 → 297,7 |
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.KompassWirkung = 16; // Wert : 0-250 |
EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250 |
EE_Parameter.Gyro_I = 150; // Wert : 0-250 |
EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250 |
305,8 → 305,8 |
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 = 5; |
EE_Parameter.UserParam1 = 0; //zur freien Verwendung |
EE_Parameter.UserParam2 = 0; //zur freien Verwendung |
EE_Parameter.UserParam1 = 120; //zur freien Verwendung |
EE_Parameter.UserParam2 = 120; //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 |
340,7 → 340,7 |
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.KompassWirkung = 16; // Wert : 0-250 |
EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250 |
EE_Parameter.Gyro_I = 175; // Wert : 0-250 |
EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250 |
348,8 → 348,8 |
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 = 5; |
EE_Parameter.UserParam1 = 0; //zur freien Verwendung |
EE_Parameter.UserParam2 = 0; //zur freien Verwendung |
EE_Parameter.UserParam1 = 120; //zur freien Verwendung |
EE_Parameter.UserParam2 = 120; //zur freien Verwendung |
EE_Parameter.UserParam3 = 0; //zur freien Verwendung |
EE_Parameter.UserParam4 = 0; //zur freien Verwendung |
EE_Parameter.UserParam3 = 0; //zur freien Verwendung |
/branches/v0.60_MicroMag3_Nick666/makefile |
---|
37,7 → 37,7 |
# Target file name (without extension). |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)_MM3 |
# 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.) |
/branches/v0.60_MicroMag3_Nick666/tags/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/tags/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/tags/GPS.c |
---|
0,0 → 1,26 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + 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/tags/Settings.h |
---|
--- tags/_Settings.h (nonexistent) |
+++ tags/_Settings.h (revision 343) |
@@ -0,0 +1,50 @@ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Testmodi |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define MOTOR_OFF 0 |
+#define MOTOR_TEST 0 |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Abstimmung |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define ACC_AMPLIFY 16 |
+#define FAKTOR_P 1 |
+#define FAKTOR_I 0.0001 |
+ |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Debug-Interface |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein? |
+#define MIN_DEBUG_INTERVALL 250 // 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/tags/analog.c |
---|
0,0 → 1,155 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100; |
volatile int AccumulateNick = 0, AccumulateRoll = 0, AccumulateGier = 0; |
volatile int accumulate_AccRoll = 0,accumulate_AccNick = 0,accumulate_AccHoch = 0; |
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0; |
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0; |
volatile long Luftdruck = 32000; |
volatile int StartLuftdruck; |
volatile unsigned int MessLuftdruck = 1023; |
unsigned char DruckOffsetSetting; |
volatile int HoeheD = 0; |
volatile char messanzahl_Druck; |
volatile int tmpLuftdruck; |
volatile unsigned int ZaehlMessungen = 0; |
//####################################################################################### |
// |
void ADC_Init(void) |
//####################################################################################### |
{ |
ADMUX = 0;//Referenz ist extern |
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE); |
//Free Running Mode, Division Factor 128, Interrupt on |
} |
void SucheLuftruckOffset(void) |
{ |
unsigned int off; |
for(off=0; off < 250;off++) |
{ |
OCR0A = off; |
Delay_ms(50); |
printf("."); |
if(MessLuftdruck < 900) break; |
} |
DruckOffsetSetting = off; |
Delay_ms(200); |
} |
//####################################################################################### |
// |
SIGNAL(SIG_ADC) |
//####################################################################################### |
{ |
static unsigned char kanal=0,state = 0; |
signed int wert; |
ANALOG_OFF; |
switch(state++) |
{ |
case 0: |
wert = (signed int) AdNeutralGier - ADC; |
AccumulateGier += wert; // |
MessanzahlGier++; |
Mess_Integral_Gier += wert;// / 16; |
Mess_Integral_Gier2 += wert; |
kanal = 1; |
ZaehlMessungen++; |
break; |
case 1: |
wert = (signed int) ADC - AdNeutralRoll; |
Mess_IntegralRoll += wert; |
Mess_IntegralRoll2 += wert; |
if(ADC < 10) wert = -700; |
if(ADC > 1000) wert = +700; |
AccumulateRoll += wert; |
MessanzahlRoll++; |
kanal = 2; |
break; |
case 2: |
wert = (signed int) ADC - AdNeutralNick; |
Mess_IntegralNick += wert; |
Mess_IntegralNick2 += wert; |
if(ADC < 10) wert = -700; |
if(ADC > 1000) wert = +700; |
AccumulateNick += wert; |
MessanzahlNick++; |
kanal = 4; |
break; |
case 3: |
UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2; |
kanal = 6; |
break; |
case 4: |
Aktuell_ay = NeutralAccY - ADC; |
accumulate_AccRoll += Aktuell_ay; |
messanzahl_AccRoll++; |
kanal = 7; |
break; |
case 5: |
Aktuell_ax = ADC - NeutralAccX; |
accumulate_AccNick += Aktuell_ax; |
messanzahl_AccNick++; |
kanal = 5; |
state = 6; |
break; |
case 6: |
accumulate_AccHoch = (signed int) ADC - NeutralAccZ; |
accumulate_AccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4; |
if(accumulate_AccHoch > 1) |
{ |
if(NeutralAccZ < 800) NeutralAccZ+= 0.02; |
} |
else if(accumulate_AccHoch < -1) |
{ |
if(NeutralAccZ > 600) NeutralAccZ-= 0.02; |
} |
messanzahl_AccHoch = 1; |
Aktuell_az = ADC; |
Mess_Integral_Hoch += accumulate_AccHoch; // Integrieren |
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
// Mess_Integral_Hoch -= Mess_Integral_Hoch / 512; // dämfen |
/* if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
kanal = 3; |
state = 7; |
} |
else |
{ |
kanal = 0; |
state = 0; |
}*/ |
kanal = 3; |
state = 7; |
break; |
case 7: |
tmpLuftdruck += ADC; |
if(++messanzahl_Druck >= 5) |
{ |
MessLuftdruck = ADC; |
messanzahl_Druck = 0; |
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert |
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4; |
HoehenWert = StartLuftdruck - Luftdruck; |
tmpLuftdruck = 0; |
} |
kanal = 0; |
state = 0; |
break; |
default: |
kanal = 0; |
state = 0; |
break; |
} |
ADMUX = kanal; |
ANALOG_ON; |
} |
/branches/v0.60_MicroMag3_Nick666/tags/analog.h |
---|
0,0 → 1,23 |
/*####################################################################################### |
#######################################################################################*/ |
extern volatile int UBat; |
extern volatile int AccumulateNick, AccumulateRoll, AccumulateGier,accumulate_AccRoll,accumulate_AccNick,accumulate_AccHoch; |
extern volatile char MessanzahlNick, MessanzahlRoll, MessanzahlGier,messanzahl_AccNick, messanzahl_AccRoll,messanzahl_AccHoch; |
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az; |
extern volatile long Luftdruck; |
extern volatile char messanzahl_Druck; |
extern volatile unsigned int ZaehlMessungen; |
extern unsigned char DruckOffsetSetting; |
extern volatile int HoeheD; |
extern volatile unsigned int MessLuftdruck; |
extern volatile int StartLuftdruck; |
extern unsigned int ReadADC(unsigned char adc_input); |
extern void ADC_Init(void); |
extern void SucheLuftruckOffset(void); |
#define ANALOG_OFF ADCSRA=0 |
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE) |
/branches/v0.60_MicroMag3_Nick666/tags/compass.c |
---|
0,0 → 1,218 |
/* |
Copyright 2007, Niklas Nold |
This program (files compass.c and compass.h) is free software; you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; |
either version 3 of the License, or (at your option) any later version. |
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; |
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
Please note: All the other files for the project "Mikrokopter" by H. Buss are under the license (license_buss.txt) published by www.mikrokopter.de |
*/ |
#include "main.h" |
MM3_struct *MM3; |
int8_t Kompass_Offset[2] EEMEM; // X_off[0], Y_off[1], Z_off[2] |
int8_t X_off, Y_off, Z_off; |
//############################################################################ |
// Initialisierung |
void MM3_init(void) |
//############################################################################ |
{ |
SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0); //Interrupt an, Master, 156 kHz Oszillator |
//SPSR = (1<<SPI2X); |
DDRB |= (1<<PB7)|(1<<PB5)|(1<<PB2); // J8, MOSI, SCK Ausgang |
PORTD &= ~(1<<PD3); // J5 auf Low |
MM3->AXIS = MM3_X; |
MM3->STATE = MM3_RESET; |
// Kalibrierung aus dem EEprom lesen |
X_off = (int8_t)eeprom_read_byte(&Kompass_Offset[0]); |
Y_off = (int8_t)eeprom_read_byte(&Kompass_Offset[1]); |
Z_off = (int8_t)eeprom_read_byte(&Kompass_Offset[2]); |
} |
//############################################################################ |
// Wird in der SIGNAL (SIG_OVERFLOW0) aufgerufen |
void MM3_timer0(void) |
//############################################################################ |
{ |
switch (MM3->STATE) |
{ |
case MM3_RESET: |
PORTB |= (1<<PB2); // J8 auf High, MM3 Reset |
MM3->STATE = MM3_START_TRANSFER; |
return; |
case MM3_START_TRANSFER: |
PORTB &= ~(1<<PB2); // J8 auf Low (war ~125 µs auf High) |
if (MM3->AXIS == MM3_X) SPDR = 0x31; // Schreiben ins SPDR löst automatisch Übertragung (MOSI und MISO) aus |
else if (MM3->AXIS == MM3_Y) SPDR = 0x32; // Micromag Period Select ist auf 256 (0x30) |
else if (MM3->AXIS == MM3_Z) SPDR = 0x33; // 1: x-Achse, 2: Y-Achse, 3: Z-Achse |
MM3->DRDY = SetDelay(8); // Laut Datenblatt max. Zeit bis Messung fertig (bei PS 256 eigentlich 4 ms) |
MM3->STATE = MM3_WAIT_DRDY; |
return; |
case MM3_WAIT_DRDY: |
if (CheckDelay(MM3->DRDY)) {SPDR = 0x00;MM3->STATE = MM3_DRDY;} // Irgendwas ins SPDR, damit Übertragung ausgelöst wird, wenn Wartezeit vorbei |
return; // Jetzt gehts weiter in SIGNAL (SIG_SPI) |
case MM3_TILT: // Zeitnahe Speicherung der aktuellen Neigung in ° |
MM3->NickGrad = asin_i((float)Aktuell_ax/EE_Parameter.UserParam1*200); |
MM3->RollGrad = asin_i((float)Aktuell_ay/EE_Parameter.UserParam2*200); |
MM3->AXIS = MM3_X; |
MM3->STATE = MM3_RESET; |
return; |
} |
} |
//############################################################################ |
// SPI byte ready |
SIGNAL (SIG_SPI) |
//############################################################################ |
{ |
switch (MM3->STATE) |
{ |
case MM3_DRDY: // 1. Byte ist da, abspeichern, an die MSB-Stelle rücken |
if (MM3->AXIS == MM3_X) |
{ |
MM3->x_axis = SPDR; |
MM3->x_axis <<= 8; |
} |
else if (MM3->AXIS == MM3_Y) |
{ |
MM3->y_axis = SPDR; |
MM3->y_axis <<= 8; |
} |
else // if (MM3->AXIS == MM3_Z) |
{ |
MM3->z_axis = SPDR; |
MM3->z_axis <<= 8; |
} |
SPDR=0x00; // Übertragung von 2. Byte auslösen |
MM3->STATE=MM3_BYTE2; |
return; |
case MM3_BYTE2: // 2. Byte der entsprechenden Achse ist da |
if (MM3->AXIS == MM3_X) |
{ |
MM3->x_axis |= SPDR; |
// Spikes filtern |
if (abs(MM3->x_axis) < Max_Axis_Value) MM3->x_axis_old = MM3->x_axis; |
else MM3->x_axis = MM3->x_axis_old; |
MM3->AXIS = MM3_Y; |
MM3->STATE = MM3_RESET; |
} |
else if (MM3->AXIS == MM3_Y) |
{ |
MM3->y_axis |= SPDR; |
if (abs(MM3->y_axis) < Max_Axis_Value) MM3->y_axis_old = MM3->y_axis; |
else MM3->y_axis = MM3->y_axis_old; |
MM3->AXIS = MM3_Z; |
MM3->STATE = MM3_RESET; |
} |
else // if (MM3->AXIS == MM3_Z) |
{ |
MM3->z_axis |= SPDR; |
if (abs(MM3->z_axis) < Max_Axis_Value) MM3->z_axis_old = MM3->z_axis; |
else MM3->z_axis = MM3->z_axis_old; |
MM3->STATE = MM3_TILT; |
} |
return; |
} |
} |
//############################################################################ |
// Kompass kalibrieren |
void MM3_calib(void) |
//############################################################################ |
{ |
signed int x_min=0,x_max=0,y_min=0,y_max=0,z_min=0,z_max=0; |
uint8_t measurement=50,beeper=0; |
unsigned int timer; |
while (measurement) |
{ |
//H_earth = MM3->x_axis*MM3->x_axis + MM3->y_axis*MM3->y_axis + MM3->z_axis*MM3->z_axis; |
if (MM3->x_axis > x_max) x_max = MM3->x_axis; |
else if (MM3->x_axis < x_min) x_min = MM3->x_axis; |
if (MM3->y_axis > y_max) y_max = MM3->y_axis; |
else if (MM3->y_axis < y_min) y_min = MM3->y_axis; |
if (MM3->z_axis > z_max) z_max = MM3->z_axis; |
else if (MM3->z_axis < z_min) z_min = MM3->z_axis; |
if (!beeper) |
{ |
beeper = 50; |
beeptime = 50; |
} |
beeper--; |
// Schleife mit 100 Hz voll ausreichend |
timer = SetDelay(10); |
while(!CheckDelay(timer)); |
// Wenn Gas zurück genommen wird, Kalibrierung mit Verzögerung beenden |
if (PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < 100) measurement--; |
} |
X_off = (x_max + x_min) / 2; |
Y_off = (y_max + y_min) / 2; |
Z_off = (z_max + z_min) / 2; |
eeprom_write_byte(&Kompass_Offset[0], X_off); |
eeprom_write_byte(&Kompass_Offset[1], Y_off); |
eeprom_write_byte(&Kompass_Offset[2], Z_off); |
} |
//############################################################################ |
// Neigungskompensierung und Berechnung der Ausrichtung |
signed int MM3_heading(void) |
//############################################################################ |
{ |
float sin_nick, cos_nick, sin_roll, cos_roll; |
signed int x_corr, y_corr, heading; |
signed int x_axis,y_axis,z_axis; |
// Berechung von sinus und cosinus |
sin_nick = sin_f(MM3->NickGrad); |
cos_nick = cos_f(MM3->NickGrad); |
sin_roll = sin_f(MM3->RollGrad); |
cos_roll = cos_f(MM3->RollGrad); |
// Kompasskalibrierung berücksichtigen |
x_axis = MM3->x_axis - X_off; |
y_axis = MM3->y_axis - Y_off; |
z_axis = MM3->z_axis - Z_off; |
// Neigungskompensation |
x_corr = (cos_nick * x_axis) + (((sin_roll * y_axis) - (cos_roll * z_axis)) * sin_nick); |
y_corr = ((cos_roll * y_axis) + (sin_roll * z_axis)); |
// Winkelberechnung |
heading = atan2_i(x_corr, y_corr); |
return (heading); |
} |
/branches/v0.60_MicroMag3_Nick666/tags/compass.h |
---|
0,0 → 1,37 |
typedef struct |
{ |
uint8_t STATE; |
unsigned int DRDY; |
uint8_t AXIS; |
signed int x_axis; |
signed int x_axis_old; |
signed int y_axis; |
signed int y_axis_old; |
signed int z_axis; |
signed int z_axis_old; |
signed int NickGrad; |
signed int RollGrad; |
} MM3_struct; |
extern MM3_struct *MM3; |
extern int8_t X_off, Y_off, Z_off; |
void MM3_init(void); |
void MM3_timer0(void); |
void MM3_calib(void); |
signed int MM3_heading(void); |
#define Max_Axis_Value 500 |
// Die Werte der Statemachine |
#define MM3_RESET 0 |
#define MM3_START_TRANSFER 1 |
#define MM3_WAIT_DRDY 2 |
#define MM3_DRDY 4 |
#define MM3_BYTE2 8 |
#define MM3_X 16 |
#define MM3_Y 32 |
#define MM3_Z 64 |
#define MM3_TILT 128 |
/branches/v0.60_MicroMag3_Nick666/tags/compass_old.c |
---|
0,0 → 1,150 |
/* |
Copyright 2007, Niklas Nold |
This program (files compass.c and compass.h) is free software; you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; |
either version 3 of the License, or (at your option) any later version. |
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; |
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
Please note: All the other files for the project "Mikrokopter" by H. Buss are under the license (license_buss.txt) published by www.mikrokopter.de |
*/ |
#include "main.h" |
MM3_struct MM3; |
//############################################################################ |
//Initialisierung der SPI-Schnittstelle |
void init_spi(void) |
//############################################################################ |
{ |
SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0); //Interrupt an, Master, 156 kHz Oszillator |
//SPSR = (1<<SPI2X); |
DDRB |= (1<<PB7)|(1<<PB5)|(1<<PB2); // J8, MOSI, SCK Ausgang |
PORTD &= ~(1<<PD3); // J5 auf Low |
MM3.AXIS = MM3_X; |
MM3.STATE = MM3_RESET; |
} |
//############################################################################ |
//Wird in der SIGNAL (SIG_OVERFLOW0) aufgerufen |
void MM3_timer0(void) |
//############################################################################ |
{ |
switch (MM3.STATE) |
{ |
case MM3_RESET: |
PORTB |= (1<<PB2); // J8 auf High, MM3 Reset |
MM3.STATE = MM3_START_TRANSFER; |
return; |
case MM3_START_TRANSFER: |
PORTB &= ~(1<<PB2); // J8 auf Low (war ~125 µs auf High) |
if (MM3.AXIS == MM3_X) SPDR = 0x51; // Schreiben ins SPDR löst automatisch Übertragung (MOSI und MISO) aus |
else if (MM3.AXIS == MM3_Y) SPDR = 0x52; // Micromag Period Select ist auf 1024 (0x50) |
else if (MM3.AXIS == MM3_Z) SPDR = 0x53; // 1: x-Achse, 2: Y-Achse, 3: Z-Achse |
MM3.DRDY = SetDelay(15); // Laut Datenblatt max. Zeit bis Messung fertig (bei PS 1024) |
MM3.STATE = MM3_WAIT_DRDY; |
return; |
case MM3_WAIT_DRDY: |
if (CheckDelay(MM3.DRDY)) {SPDR = 0x00;MM3.STATE = MM3_DRDY;} // Irgendwas ins SPDR, damit Übertragung ausgelöst wird, wenn Wartezeit vorbei |
return; // Jetzt gehts weiter in SIGNAL (SIG_SPI) |
case MM3_TILT: // Zeitnahe Speicherung der aktuellen Neigung in ° |
MM3.NickGrad = asin_i((float)Aktuell_ax/EE_Parameter.UserParam1*200); |
MM3.RollGrad = asin_i((float)Aktuell_ay/EE_Parameter.UserParam2*200); |
MM3.AXIS = MM3_X; |
MM3.STATE = MM3_RESET; |
return; |
} |
} |
//############################################################################ |
//SPI byte ready |
SIGNAL (SIG_SPI) |
//############################################################################ |
{ |
switch (MM3.STATE) |
{ |
case MM3_DRDY: // 1. Byte ist da, abspeichern, an die MSB-Stelle rücken |
if (MM3.AXIS == MM3_X) |
{ |
MM3.x_axis = SPDR; |
MM3.x_axis <<= 8; |
} |
else if (MM3.AXIS == MM3_Y) |
{ |
MM3.y_axis = SPDR; |
MM3.y_axis <<= 8; |
} |
else // if (MM3.AXIS == MM3_Z) |
{ |
MM3.z_axis = SPDR; |
MM3.z_axis <<= 8; |
} |
SPDR=0x00; // Übertragung von 2. Byte auslösen |
MM3.STATE=MM3_BYTE2; |
return; |
case MM3_BYTE2: // 2. Byte der entsprechenden Achse ist da |
if (MM3.AXIS == MM3_X) |
{ |
MM3.x_axis |= SPDR; |
MM3.x_axis -= OFF_X; // Sofort Offset aus der Kalibrierung berücksichtigen |
MM3.AXIS = MM3_Y; |
MM3.STATE = MM3_RESET; |
} |
else if (MM3.AXIS == MM3_Y) |
{ |
MM3.y_axis |= SPDR; |
MM3.y_axis -= OFF_Y; |
MM3.AXIS = MM3_Z; |
MM3.STATE = MM3_RESET; |
} |
else // if (MM3.AXIS == MM3_Z) |
{ |
MM3.z_axis |= SPDR; |
MM3.z_axis -= OFF_Z; |
MM3.STATE = MM3_TILT; |
} |
return; |
} |
} |
signed int MM3_heading(void) |
{ |
float sin_nick, cos_nick, sin_roll, cos_roll; |
signed int x_corr, y_corr; |
signed int heading; |
// Berechung von sinus und cosinus |
sin_nick = sin_f(MM3.NickGrad); |
cos_nick = cos_f(MM3.NickGrad); |
sin_roll = sin_f(MM3.RollGrad); |
cos_roll = cos_f(MM3.RollGrad); |
// Neigungskompensation |
x_corr = (cos_nick * MM3.x_axis) + (((sin_roll * MM3.y_axis) - (cos_roll * MM3.z_axis)) * sin_nick); |
y_corr = ((cos_roll * MM3.y_axis) + (sin_roll * MM3.z_axis)); |
// Winkelberechnung |
heading = atan2_i(x_corr, y_corr); |
return (heading); |
} |
/branches/v0.60_MicroMag3_Nick666/tags/eeprom.c |
---|
--- tags/fc.c (nonexistent) |
+++ tags/fc.c (revision 343) |
@@ -0,0 +1,801 @@ |
+/*####################################################################################### |
+Flight Control |
+#######################################################################################*/ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Copyright (c) 04.2007 Holger Buss |
+// + Nur für den privaten Gebrauch |
+// + www.MikroKopter.com |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
+// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist. |
+// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
+// + bzgl. der Nutzungsbedingungen aufzunehmen. |
+// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
+// + Verkauf von Luftbildaufnahmen, usw. |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
+// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
+// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
+// + eindeutig als Ursprung verlinkt werden |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
+// + Benutzung auf eigene Gefahr |
+// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
+// + mit unserer Zustimmung zulässig |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
+// + this list of conditions and the following disclaimer. |
+// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
+// + from this software without specific prior written permission. |
+// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
+// + for non-commercial use (directly or indirectly) |
+// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
+// + with our written permission |
+// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
+// + clearly linked as origin |
+// + * porting to systems other than hardware from www.mikrokopter.de is not allowed |
+// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
+// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
+// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
+// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
+// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
+// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
+// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
+// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
+// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
+// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
+// + POSSIBILITY OF SUCH DAMAGE. |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+#include "main.h" |
+ |
+unsigned char h,m,s; |
+volatile unsigned char Timeout = 0; |
+volatile int MesswertNick,MesswertRoll,MesswertGier; |
+volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0; |
+volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0; |
+volatile float NeutralAccZ = 0; |
+unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0; |
+volatile long IntegralNick = 0,IntegralNick2 = 0; |
+volatile long IntegralRoll = 0,IntegralRoll2 = 0; |
+volatile long Integral_Gier = 0; |
+volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
+volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
+volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
+volatile long Mess_Integral_Hoch = 0; |
+volatile int KompassValue = 0; |
+volatile int KompassStartwert = 0; |
+volatile int KompassRichtung = 0; |
+unsigned char MAX_GAS,MIN_GAS; |
+unsigned char Notlandung = 0; |
+unsigned char HoehenReglerAktiv = 0; |
+ |
+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; |
+ |
+float Kp = FAKTOR_P; |
+float Ki = FAKTOR_I; |
+ |
+unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
+unsigned char Parameter_MaxHoehe = 251; // Wert : 0-250 |
+unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32 |
+unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250 |
+unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250 |
+unsigned char Parameter_Gyro_P = 50; // 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; |
+struct mk_param_struct EE_Parameter; |
+ |
+void Piep(unsigned char Anzahl) |
+{ |
+ while(Anzahl--) |
+ { |
+ if(MotorenEin) return; //auf keinen Fall im Flug! |
+ beeptime = 100; |
+ Delay_ms(250); |
+ } |
+} |
+ |
+//############################################################################ |
+// Nullwerte ermitteln |
+void SetNeutral(void) |
+//############################################################################ |
+{ |
+ unsigned int timer; |
+ NeutralAccX = 0; |
+ NeutralAccY = 0; |
+ NeutralAccZ = 0; |
+ AdNeutralNick = 0; |
+ AdNeutralRoll = 0; |
+ AdNeutralGier = 0; |
+ CalibrierMittelwert(); |
+ timer = SetDelay(5); |
+ while (!CheckDelay(timer)); |
+ CalibrierMittelwert(); |
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
+ { |
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
+ } |
+ AdNeutralNick= abs(MesswertNick); |
+ AdNeutralRoll= abs(MesswertRoll); |
+ AdNeutralGier= abs(MesswertGier); |
+ 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; |
+} |
+ |
+//############################################################################ |
+// Bildet den Mittelwert aus den Messwerten |
+void Mittelwert(void) |
+//############################################################################ |
+{ |
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern |
+ ANALOG_OFF; |
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick); |
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll); |
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier); |
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((long)Mittelwert_AccNick * 7 + ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick)) / 8L; |
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 7 + ((ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll)) / 8L; |
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 7 + ((long)accumulate_AccHoch) / messanzahl_AccHoch) / 8L; |
+ AccumulateNick = 0; MessanzahlNick = 0; |
+ AccumulateRoll = 0; MessanzahlRoll = 0; |
+ AccumulateGier = 0; MessanzahlGier = 0; |
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0; |
+ accumulate_AccNick = 0;messanzahl_AccNick = 0; |
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0; |
+ Integral_Gier = Mess_Integral_Gier; |
+// Integral_Gier2 = Mess_Integral_Gier2; |
+ IntegralNick = Mess_IntegralNick; |
+ IntegralRoll = Mess_IntegralRoll; |
+ IntegralNick2 = Mess_IntegralNick2; |
+ IntegralRoll2 = Mess_IntegralRoll2; |
+ // ADC einschalten |
+ ANALOG_ON; |
+ |
+//------------------------------------------------------------------------------ |
+ if(MesswertNick > 200) MesswertNick += 4 * (MesswertNick - 200); |
+ else |
+ if(MesswertNick < -200) MesswertNick += 4 * (MesswertNick + 200); |
+ |
+ if(MesswertRoll > 200) MesswertRoll += 4 * (MesswertRoll - 200); |
+ else |
+ if(MesswertRoll < -200) MesswertRoll += 4 * (MesswertRoll + 200); |
+//------------------------------------------------------------------------------ |
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--; |
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--; |
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--; |
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--; |
+ 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; |
+ if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick); |
+ if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll); |
+ if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier); |
+ if(messanzahl_AccNick) Mittelwert_AccNick = ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick); |
+ if(messanzahl_AccRoll) Mittelwert_AccRoll = (ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll; |
+ if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)accumulate_AccHoch) / messanzahl_AccHoch; |
+ AccumulateNick = 0; MessanzahlNick = 0; |
+ AccumulateRoll = 0; MessanzahlRoll = 0; |
+ AccumulateGier = 0; MessanzahlGier = 0; |
+ accumulate_AccRoll = 0;messanzahl_AccRoll = 0; |
+ accumulate_AccNick = 0;messanzahl_AccNick = 0; |
+ accumulate_AccHoch = 0;messanzahl_AccHoch = 0; |
+ // ADC einschalten |
+ ANALOG_ON; |
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--; |
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--; |
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--; |
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--; |
+ 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; |
+} |
+ |
+//############################################################################ |
+// 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(); |
+} |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Konstanten |
+// + 0-250 -> normale Werte |
+// + 251 -> Poti1 |
+// + 252 -> Poti2 |
+// + 253 -> Poti3 |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+void DefaultKonstanten1(void) |
+{ |
+ EE_Parameter.Kanalbelegung[K_NICK] = 1; |
+ EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
+ EE_Parameter.Kanalbelegung[K_GAS] = 3; |
+ EE_Parameter.Kanalbelegung[K_GIER] = 4; |
+ EE_Parameter.Kanalbelegung[K_POTI1] = 5; |
+ EE_Parameter.Kanalbelegung[K_POTI2] = 6; |
+ EE_Parameter.Kanalbelegung[K_POTI3] = 7; |
+ EE_Parameter.Kanalbelegung[K_POTI4] = 8; |
+ EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01; |
+ EE_Parameter.Hoehe_MinGas = 30; |
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1 |
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
+ EE_Parameter.Luftdruck_D = 70; // Wert : 0-250 |
+ EE_Parameter.Hoehe_ACC_Wirkung = 30; // Wert : 0-250 |
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50 |
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6 |
+ EE_Parameter.Stick_D = 8; //8 // Wert : 0-64 |
+ EE_Parameter.Gier_P = 16; // Wert : 1-20 |
+ EE_Parameter.Gas_Min = 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 = 90; // 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 = 5; |
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung |
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung |
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung |
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung |
+ EE_Parameter.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; |
+ memcpy(EE_Parameter.Name, "Normal\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.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01; |
+ EE_Parameter.Hoehe_MinGas = 30; |
+ EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1 |
+ EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
+ EE_Parameter.Luftdruck_D = 50; // Wert : 0-250 |
+ EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250 |
+ EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50 |
+ EE_Parameter.Stick_P = 4; //2 // Wert : 1-6 |
+ EE_Parameter.Stick_D = 0; //8 // Wert : 0-64 |
+ EE_Parameter.Gier_P = 16; // Wert : 1-20 |
+ EE_Parameter.Gas_Min = 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 = 90; // 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 = 5; |
+ EE_Parameter.UserParam1 = 0; //zur freien Verwendung |
+ EE_Parameter.UserParam2 = 0; //zur freien Verwendung |
+ EE_Parameter.UserParam3 = 0; //zur freien Verwendung |
+ EE_Parameter.UserParam4 = 0; //zur freien Verwendung |
+ EE_Parameter.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; |
+ memcpy(EE_Parameter.Name, "Kamera\0", 12); |
+} |
+ |
+ |
+//############################################################################ |
+// Trägt ggf. das Poti als Parameter ein |
+void ParameterZuordnung(void) |
+//############################################################################ |
+{ |
+ |
+ #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;} |
+ CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255); |
+ CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100); |
+ CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100); |
+ CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255); |
+ CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255); |
+ CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255); |
+ CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255); |
+ CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255); |
+ CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255); |
+ CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255); |
+ CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255); |
+ CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255); |
+ |
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255); |
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255); |
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255); |
+ |
+ 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 int IntegralFehlerNick = 0; |
+ static int IntegralFehlerRoll = 0; |
+ static unsigned int RcLostTimer; |
+ static unsigned char delay_neutral = 0; |
+ static unsigned char delay_einschalten = 0,delay_ausschalten = 0; |
+ static unsigned int modell_fliegt = 0; |
+ static int hoehenregler = 0; |
+ static char TimerWerteausgabe = 0; |
+ static char NeueKompassRichtungMerken = 0; |
+ Mittelwert(); |
+ |
+ GRN_ON; |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gaswert ermitteln |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
+ if(GasMischanteil < 0) GasMischanteil = 0; |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Emfang schlecht |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(SenderOkay < 100) |
+ { |
+ if(!PcZugriff) beeptime = 500; |
+ 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; |
+/* Poti1 = 65; |
+ Poti2 = 48; |
+ Poti3 = 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 |
+ { |
+ unsigned char setting; |
+ if(++delay_neutral > 200) // nicht sofort |
+ { |
+ GRN_OFF; |
+ SetNeutral(); |
+ MotorenEin = 0; |
+ delay_neutral = 0; |
+ modell_fliegt = 0; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
+ { |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5; |
+ eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken |
+ } |
+ ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
+ Piep(GetActiveParamSetNumber()); |
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
+ { |
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
+ } |
+ } |
+ } |
+ 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; |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Bei Empfangsausfall im Flug |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(Notlandung) |
+ { |
+ StickGier = 0; |
+ StickNick = 0; |
+ StickRoll = 0; |
+ GyroFaktor = 0.1; |
+ IntegralFaktor = 0.005; |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gyro-Drift kompensieren |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define DRIFT_FAKTOR 3 |
+ if(ZaehlMessungen >= 1000 / DRIFT_FAKTOR) |
+ { |
+ IntegralFehlerNick = IntegralNick2 - IntegralNick; |
+ IntegralFehlerRoll = IntegralRoll2 - IntegralRoll; |
+ ZaehlMessungen = 0; |
+ if(IntegralFehlerNick > 500/DRIFT_FAKTOR) AdNeutralNick++; |
+ if(IntegralFehlerNick < -500/DRIFT_FAKTOR) AdNeutralNick--; |
+ if(IntegralFehlerRoll > 500/DRIFT_FAKTOR) AdNeutralRoll++; |
+ if(IntegralFehlerRoll < -500/DRIFT_FAKTOR) AdNeutralRoll--; |
+ //if(Mess_Integral_Gier2 > 500/DRIFT_FAKTOR) AdNeutralGier--; |
+ //if(Mess_Integral_Gier2 <-500/DRIFT_FAKTOR) AdNeutralGier++; |
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern |
+ Mess_IntegralNick2 = IntegralNick; |
+ Mess_IntegralRoll2 = IntegralRoll; |
+ Mess_Integral_Gier2 = Integral_Gier; |
+ ANALOG_ON; // ADC einschalten |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Integrale auf ACC-Signal abgleichen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick) / 16; |
+ tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll) / 16; |
+#define AUSGLEICH 500 |
+ if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH; |
+ if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH; |
+ if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH; |
+ if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH; |
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern |
+ Mess_IntegralNick -= tmp_long; |
+ Mess_IntegralRoll -= tmp_long2; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gieren |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ sollGier = StickGier; |
+ if(abs(StickGier) > 35) |
+ { |
+ if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1; |
+ } |
+ tmp_int = EE_Parameter.Gier_P * (sollGier * abs(sollGier)) / 256; // expo |
+ Mess_Integral_Gier -= tmp_int; |
+ if(Mess_Integral_Gier > 30000) Mess_Integral_Gier = 30000; // begrenzen |
+ if(Mess_Integral_Gier <-30000) Mess_Integral_Gier =-30000; |
+ |
+ ANALOG_ON; // ADC einschalten |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Kompass |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)) |
+ { |
+ if(NeueKompassRichtungMerken) |
+ { |
+ KompassStartwert = KompassValue; |
+ NeueKompassRichtungMerken = 0; |
+ } |
+ ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern |
+ Mess_Integral_Gier -= (KompassRichtung * Parameter_KompassWirkung) / 32; // nach Kompass ausrichten |
+ ANALOG_ON; // ADC einschalten |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Debugwerte zuordnen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+DebugOut.Sekunden++; |
+ if(!TimerWerteausgabe--) |
+ { |
+ TimerWerteausgabe = 49; |
+// DebugOut.Analog[0] = MesswertNick; |
+// DebugOut.Analog[1] = MesswertRoll; |
+// DebugOut.Analog[2] = MesswertGier; |
+// DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor; |
+// DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor; |
+ |
+ DebugOut.Analog[0] = MM3->NickGrad; |
+ DebugOut.Analog[1] = MM3->RollGrad; |
+ 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[7] = GasMischanteil; |
+ DebugOut.Analog[8] = KompassValue; |
+ |
+//DebugOut.Analog[8] = MM3_heading(); |
+DebugOut.Analog[9] = MM3->x_axis; |
+DebugOut.Analog[10] = MM3->y_axis; |
+DebugOut.Analog[11] = MM3->z_axis; |
+ |
+// 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 |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor; |
+ MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor; |
+ MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor; |
+ // 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 |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gier-Anteil |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ GierMischanteil = MesswertGier - sollGier; // Regler für Gier |
+ if(GierMischanteil > 100) GierMischanteil = 100; |
+ if(GierMischanteil < -100) GierMischanteil = -100; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// 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 |
+ motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer |
+ if ((motorwert < 0) | (GasMischanteil < 10)) 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) | (GasMischanteil < 10)) 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 |
+ // Motor Links |
+ motorwert = GasMischanteil + pd_ergebnis - GierMischanteil; |
+ if ((motorwert < 0) | (GasMischanteil < 10)) 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) | (GasMischanteil < 10)) 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/tags/fc.h |
---|
0,0 → 1,109 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
#ifndef _FC_H |
#define _FC_H |
extern volatile unsigned char Timeout; |
extern unsigned char Sekunde,Minute; |
extern volatile long IntegralNick,IntegralNick2; |
extern volatile long IntegralRoll,IntegralRoll2; |
extern volatile long Mess_IntegralNick,Mess_IntegralNick2; |
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2; |
extern volatile long Mess_Integral_Hoch; |
extern volatile long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2; |
extern volatile int KompassValue; |
extern volatile int KompassStartwert; |
extern volatile int KompassRichtung; |
extern int HoehenWert; |
extern int SollHoehe; |
extern volatile int MesswertNick,MesswertRoll,MesswertGier; |
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll; |
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch; |
extern volatile float NeutralAccZ; |
void MotorRegler(void); |
void SendMotorData(void); |
void CalibrierMittelwert(void); |
void Mittelwert(void); |
void SetNeutral(void); |
void Piep(unsigned char Anzahl); |
void DefaultKonstanten1(void); |
void DefaultKonstanten2(void); |
unsigned char h,m,s; |
volatile unsigned char Timeout ; |
unsigned char CosinusNickWinkel, CosinusRollWinkel; |
volatile long IntegralNick,IntegralNick2; |
volatile long IntegralRoll,IntegralRoll2; |
volatile long Integral_Gier; |
volatile long Mess_IntegralNick,Mess_IntegralNick2; |
volatile long Mess_IntegralRoll,Mess_IntegralRoll2; |
volatile long Mess_Integral_Gier; |
volatile int DiffNick,DiffRoll; |
extern int Poti1, Poti2, Poti3, Poti4; |
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
unsigned char MotorWert[5]; |
volatile unsigned char SenderOkay; |
int StickNick,StickRoll,StickGier; |
char MotorenEin; |
extern void DefaultKonstanten(void); |
#define STRUCT_PARAM_LAENGE 58 |
struct mk_param_struct |
{ |
unsigned char Kanalbelegung[8]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3 |
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv |
unsigned char Hoehe_MinGas; // Wert : 0-100 |
unsigned char Luftdruck_D; // Wert : 0-250 |
unsigned char MaxHoehe; // Wert : 0-32 |
unsigned char Hoehe_P; // Wert : 0-32 |
unsigned char Hoehe_Verstaerkung; // Wert : 0-50 |
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250 |
unsigned char Stick_P; // Wert : 1-6 |
unsigned char Stick_D; // Wert : 0-64 |
unsigned char Gier_P; // Wert : 1-20 |
unsigned char Gas_Min; // Wert : 0-32 |
unsigned char Gas_Max; // Wert : 33-250 |
unsigned char GyroAccFaktor; // Wert : 1-64 |
unsigned char KompassWirkung; // Wert : 0-32 |
unsigned char Gyro_P; // Wert : 10-250 |
unsigned char Gyro_I; // Wert : 0-250 |
unsigned char UnterspannungsWarnung; // Wert : 0-250 |
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust |
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen |
unsigned char UfoAusrichtung; // X oder + Formation |
unsigned char I_Faktor; // Wert : 0-250 |
unsigned char UserParam1; // Wert : 0-250 |
unsigned char UserParam2; // Wert : 0-250 |
unsigned char UserParam3; // Wert : 0-250 |
unsigned char UserParam4; // Wert : 0-250 |
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos |
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo |
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag |
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag |
unsigned char ServoNickRefresh; // Wert : 0-250 // Richtung Einfluss Gyro/Servo |
unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo |
unsigned char Reserved[7]; |
char Name[12]; |
}; |
extern struct mk_param_struct EE_Parameter; |
extern unsigned char Parameter_Luftdruck_D; |
extern unsigned char Parameter_MaxHoehe; |
extern unsigned char Parameter_Hoehe_P; |
extern unsigned char Parameter_Hoehe_ACC_Wirkung; |
extern unsigned char Parameter_KompassWirkung; |
extern unsigned char Parameter_Gyro_P; |
extern unsigned char Parameter_Gyro_I; |
extern unsigned char Parameter_Gier_P; |
extern unsigned char Parameter_ServoNickControl; |
#endif //_FC_H |
/branches/v0.60_MicroMag3_Nick666/tags/flight.pnproj |
---|
0,0 → 1,0 |
<Project name="Flight-Ctrl"><File path="uart.h"></File><File path="main.c"></File><File path="main.h"></File><File path="makefile"></File><File path="uart.c"></File><File path="printf_P.h"></File><File path="printf_P.c"></File><File path="timer0.c"></File><File path="timer0.h"></File><File path="old_macros.h"></File><File path="twimaster.c"></File><File path="version.txt"></File><File path="twimaster.h"></File><File path="rc.c"></File><File path="rc.h"></File><File path="fc.h"></File><File path="fc.c"></File><File path="menu.h"></File><File path="menu.c"></File><File path="_Settings.h"></File><File path="analog.c"></File><File path="analog.h"></File><File path="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File><File path="math.c"></File><File path="math.h"></File><File path="compass.c"></File><File path="compass.h"></File></Project> |
/branches/v0.60_MicroMag3_Nick666/tags/flight.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd> |
/branches/v0.60_MicroMag3_Nick666/tags/gps.h |
---|
0,0 → 1,4 |
extern signed int GPS_Nick; |
extern signed int GPS_Roll; |
extern void GPS_Neutral(void); |
extern void GPS_BerechneZielrichtung(void); |
/branches/v0.60_MicroMag3_Nick666/tags/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/tags/main.c |
---|
0,0 → 1,224 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + Nur für den privaten Gebrauch |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nicht-kommerziellen Gebrauch zulässig ist. |
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
// + bzgl. der Nutzungsbedingungen aufzunehmen. |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
// + Verkauf von Luftbildaufnahmen, usw. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
// + auf anderen Webseiten oder Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + eindeutig als Ursprung verlinkt und genannt werden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
// + Benutzung auf eigene Gefahr |
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
// + mit unserer Zustimmung zulässig |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
// + this list of conditions and the following disclaimer. |
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
// + from this software without specific prior written permission. |
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
// + for non-commercial use (directly or indirectly) |
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
// + with our written permission |
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
// + clearly linked as origin |
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// + POSSIBILITY OF SUCH DAMAGE. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
// unsigned char EEPromArray[E2END+1] EEMEM; |
unsigned char EEPromArray[501] EEMEM; |
// -- Parametersatz aus EEPROM lesen --- |
// number [0..5] |
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length) |
{ |
if (number > 5) number = 5; |
eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length); |
} |
// -- Parametersatz ins EEPROM schreiben --- |
// number [0..5] |
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length) |
{ |
if (number > 5) number = 5; |
eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken |
} |
unsigned char GetActiveParamSetNumber(void) |
{ |
return(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET])); |
} |
//############################################################################ |
//Hauptprogramm |
int main (void) |
//############################################################################ |
{ |
unsigned int timer; |
unsigned int timer2 = 0; |
DDRC = 0x01; // SCL |
PORTC = 0xff; // Pullup SDA |
DDRB = 0x1B; // LEDs und Druckoffset |
PORTB |= (1<<PB0); // LED_Rot |
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5 |
DDRD |= (1<<PD7); // J7 |
PORTD = 0xF7; |
MCUSR &=~(1<<WDRF); |
WDTCSR |= (1<<WDCE)|(1<<WDE); |
WDTCSR = 0; |
beeptime = 1000; |
StickGier = 0; PPM_in[K_GAS] = 0;StickRoll = 0; StickNick = 0; |
ROT_OFF; |
Timer_Init(); |
UART_Init(); |
rc_sum_init(); |
ADC_Init(); |
i2c_init(); |
MM3_init(); |
sei(); |
VersionInfo.Hauptversion = VERSION_HAUPTVERSION; |
VersionInfo.Nebenversion = VERSION_NEBENVERSION; |
VersionInfo.PCKompatibel = VERSION_KOMPATIBEL; |
printf("\n\rFlightControl V%d.%d ", VERSION_HAUPTVERSION, VERSION_NEBENVERSION); |
printf("\n\r=============================="); |
GRN_ON; |
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != 59) // seit V 0.60 |
{ |
printf("\n\rInit. EEPROM: Generiere Default-Parameter..."); |
DefaultKonstanten1(); |
for (unsigned char i=0;i<6;i++) |
{ |
if(i==2) DefaultKonstanten2(); |
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
} |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 1); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], 59); |
} |
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber()); |
//kurze Wartezeit (sonst reagiert die "Kompass kalibrieren?"-Abfrage nicht |
timer = SetDelay(500); |
while(!CheckDelay(timer)); |
//Kompass kalibrieren? |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 100 && PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 100) |
{ |
printf("\n\rKalibriere Kompass"); |
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) MM3_calib(); |
} |
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
printf("\n\rAbgleich Luftdrucksensor.."); |
timer = SetDelay(2500); |
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(); |
while (1) |
{ |
if (UpdateMotor) // ReglerIntervall |
{ |
UpdateMotor=0; |
MotorRegler(); |
SendMotorData(); |
ROT_OFF; |
if(PcZugriff) PcZugriff--; |
if(SenderOkay) SenderOkay--; |
if (UBat < EE_Parameter.UnterspannungsWarnung) |
{ |
beeptime = 2000; |
} |
if(!Timeout) |
{ |
i2c_init(); |
} |
else |
{ |
ROT_OFF; |
} |
} |
if(SIO_DEBUG) |
{ |
DatenUebertragung(); |
BearbeiteRxDaten(); |
} |
else BearbeiteRxDaten(); |
if(CheckDelay(timer2)) |
{ |
if(MotorenEin) PORTC ^= 0x10; else PORTC &= ~0x10; |
timer = SetDelay(500); |
} |
} |
return (1); |
} |
/branches/v0.60_MicroMag3_Nick666/tags/main.h |
---|
0,0 → 1,94 |
#ifndef _MAIN_H |
#define _MAIN_H |
//Hier die Quarz Frequenz einstellen |
#if defined (__AVR_ATmega32__) |
#define SYSCLK 20000000L //Quarz Frequenz in Hz |
#endif |
#if defined (__AVR_ATmega644__) |
#define SYSCLK 20000000L //Quarz Frequenz in Hz |
//#define SYSCLK 16000000L //Quarz Frequenz in Hz |
#endif |
// neue Hardware |
#define ROT_OFF PORTB &=~(1<<PB0) |
#define ROT_ON PORTB |= (1<<PB0) |
#define ROT_FLASH PORTB ^= (1<<PB0) |
#define GRN_OFF PORTB &=~(1<<PB1) |
#define GRN_ON PORTB |= (1<<PB1) |
#define GRN_FLASH PORTD ^= (1<<PB1) |
//#ifndef F_CPU |
//#error ################## F_CPU nicht definiert oder ungültig ############# |
//#endif |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//#define ANZ_MITTELWERT 4 |
#define EEPROM_ADR_VALID 1 |
#define EEPROM_ADR_ACTIVE_SET 2 |
#define EEPROM_ADR_PARAM_BEGIN 100 |
#define CFG_HOEHENREGELUNG 0x01 |
#define CFG_HOEHEN_SCHALTER 0x02 |
#define CFG_HEADING_HOLD 0x04 |
#define CFG_KOMPASS_AKTIV 0x08 |
#define CFG_KOMPASS_FIX 0x10 |
#define CFG_GPS_AKTIV 0x20 |
//#define 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 void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length); |
extern void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length); |
extern unsigned char GetActiveParamSetNumber(void); |
extern unsigned char EEPromArray[]; |
#include <stdlib.h> |
#include <string.h> |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <avr/interrupt.h> |
#include <avr/eeprom.h> |
#include <avr/boot.h> |
#include <avr/wdt.h> |
#include "old_macros.h" |
#include "_settings.h" |
#include "printf_P.h" |
#include "compass.h" |
#include "timer0.h" |
#include "uart.h" |
#include "analog.h" |
#include "twimaster.h" |
#include "menu.h" |
#include "rc.h" |
#include "fc.h" |
#include "gps.h" |
#include "math.h" |
#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/tags/makefile |
---|
0,0 → 1,392 |
#-------------------------------------------------------------------- |
# MCU name |
MCU = atmega644 |
F_CPU = 20000000 |
#------------------------------------------------------------------- |
HAUPT_VERSION = 0 |
NEBEN_VERSION = 60 |
VERSION_KOMPATIBEL = 4 # PC-Kompatibilität |
#------------------------------------------------------------------- |
ifeq ($(MCU), atmega32) |
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m |
HEX_NAME = MEGA32 |
endif |
ifeq ($(MCU), atmega644) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
# -u bei neuen Controllern wieder einspielen |
HEX_NAME = MEGA644 |
endif |
ifeq ($(F_CPU), 16000000) |
QUARZ = 16MHZ |
endif |
ifeq ($(F_CPU), 20000000) |
QUARZ = 20MHZ |
endif |
# Output format. (can be srec, ihex, binary) |
FORMAT = ihex |
# Target file name (without extension). |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION) |
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. |
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) |
OPT = s |
########################################################################################################## |
# List C source files here. (C dependencies are automatically generated.) |
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c compass.c math.c |
SRC += twimaster.c rc.c fc.c GPS.c |
########################################################################################################## |
# List Assembler source files here. |
# Make them always end in a capital .S. Files ending in a lowercase .s |
# will not be considered source files but generated files (assembler |
# output from the compiler), and will be deleted upon "make clean"! |
# Even though the DOS/Win* filesystem matches both .s and .S the same, |
# it will preserve the spelling of the filenames, and gcc itself does |
# care about how the name is spelled on its command-line. |
ASRC = |
# List any extra directories to look for include files here. |
# Each directory must be seperated by a space. |
EXTRAINCDIRS = |
# Optional compiler flags. |
# -g: generate debugging information (for GDB, or for COFF conversion) |
# -O*: optimization level |
# -f...: tuning, see gcc manual and avr-libc documentation |
# -Wall...: warning level |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create assembler listing |
CFLAGS = -O$(OPT) \ |
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \ |
-Wall -Wstrict-prototypes \ |
-mtiny-stack -mcall-prologues -Wno-pointer-sign \ |
-Wa,-adhlns=$(<:.c=.lst) \ |
$(patsubst %,-I%,$(EXTRAINCDIRS)) |
# Set a "language standard" compiler flag. |
# Unremark just one line below to set the language standard to use. |
# gnu99 = C99 + GNU extensions. See GCC manual for more information. |
#CFLAGS += -std=c89 |
#CFLAGS += -std=gnu89 |
#CFLAGS += -std=c99 |
CFLAGS += -std=gnu99 |
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL) |
# Optional assembler flags. |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create listing |
# -gstabs: have the assembler create line number information; note that |
# for use in COFF files, additional information about filenames |
# and function names needs to be present in the assembler source |
# files -- see avr-libc docs [FIXME: not yet described there] |
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs |
# Optional linker flags. |
# -Wl,...: tell GCC to pass this to linker. |
# -Map: create map file |
# --cref: add cross reference to map file |
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref |
# Additional libraries |
# Minimalistic printf version |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min |
# Floating point printf version (requires -lm below) |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt |
# -lm = math library |
LDFLAGS += -lm |
##LDFLAGS += -T./linkerfile/avr5.x |
# Programming support using avrdude. Settings and variables. |
# Programming hardware: alf avr910 avrisp bascom bsd |
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 |
# |
# Type: avrdude -c ? |
# to get a full listing. |
# |
#AVRDUDE_PROGRAMMER = stk200 |
AVRDUDE_PROGRAMMER = dt006 |
#AVRDUDE_PROGRAMMER = ponyser |
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden |
#AVRDUDE_PORT = com1 # programmer connected to serial device |
AVRDUDE_PORT = lpt1 # programmer connected to parallel port |
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex |
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS) |
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep |
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) |
# Uncomment the following if you want avrdude's erase cycle counter. |
# Note that this counter needs to be initialized first using -Yn, |
# see avrdude manual. |
#AVRDUDE_ERASE += -y |
# Uncomment the following if you do /not/ wish a verification to be |
# performed after programming the device. |
AVRDUDE_FLAGS += -V |
# Increase verbosity level. Please use this when submitting bug |
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> |
# to submit bug reports. |
#AVRDUDE_FLAGS += -v -v |
# --------------------------------------------------------------------------- |
# Define directories, if needed. |
DIRAVR = c:/winavr |
DIRAVRBIN = $(DIRAVR)/bin |
DIRAVRUTILS = $(DIRAVR)/utils/bin |
DIRINC = . |
DIRLIB = $(DIRAVR)/avr/lib |
# Define programs and commands. |
SHELL = sh |
CC = avr-gcc |
OBJCOPY = avr-objcopy |
OBJDUMP = avr-objdump |
SIZE = avr-size |
# Programming support using avrdude. |
AVRDUDE = avrdude |
REMOVE = rm -f |
COPY = cp |
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex |
ELFSIZE = $(SIZE) -A $(TARGET).elf |
# Define Messages |
# English |
MSG_ERRORS_NONE = Errors: none |
MSG_BEGIN = -------- begin -------- |
MSG_END = -------- end -------- |
MSG_SIZE_BEFORE = Size before: |
MSG_SIZE_AFTER = Size after: |
MSG_COFF = Converting to AVR COFF: |
MSG_EXTENDED_COFF = Converting to AVR Extended COFF: |
MSG_FLASH = Creating load file for Flash: |
MSG_EEPROM = Creating load file for EEPROM: |
MSG_EXTENDED_LISTING = Creating Extended Listing: |
MSG_SYMBOL_TABLE = Creating Symbol Table: |
MSG_LINKING = Linking: |
MSG_COMPILING = Compiling: |
MSG_ASSEMBLING = Assembling: |
MSG_CLEANING = Cleaning project: |
# Define all object files. |
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) |
# Define all listing files. |
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) |
# Combine all necessary flags and optional flags. |
# Add target processor to flags. |
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS) |
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) |
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) |
# Default target. |
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \ |
$(TARGET).lss $(TARGET).sym sizeafter finished end |
# Eye candy. |
# AVR Studio 3.x does not check make's exit code but relies on |
# the following magic strings to be generated by the compile job. |
begin: |
@echo |
@echo $(MSG_BEGIN) |
finished: |
@echo $(MSG_ERRORS_NONE) |
end: |
@echo $(MSG_END) |
@echo |
# Display size of file. |
sizebefore: |
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi |
sizeafter: |
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi |
# Display compiler version information. |
gccversion : |
@$(CC) --version |
# Convert ELF to COFF for use in debugging / simulating in |
# AVR Studio or VMLAB. |
COFFCONVERT=$(OBJCOPY) --debugging \ |
--change-section-address .data-0x800000 \ |
--change-section-address .bss-0x800000 \ |
--change-section-address .noinit-0x800000 \ |
--change-section-address .eeprom-0x810000 |
coff: $(TARGET).elf |
@echo |
@echo $(MSG_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof |
extcoff: $(TARGET).elf |
@echo |
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof |
# Program the device. |
program: $(TARGET).hex $(TARGET).eep |
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) |
# Create final output files (.hex, .eep) from ELF output file. |
%.hex: %.elf |
@echo |
@echo $(MSG_FLASH) $@ |
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ |
%.eep: %.elf |
@echo |
@echo $(MSG_EEPROM) $@ |
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@ |
# Create extended listing file from ELF output file. |
%.lss: %.elf |
@echo |
@echo $(MSG_EXTENDED_LISTING) $@ |
$(OBJDUMP) -h -S $< > $@ |
# Create a symbol table from ELF output file. |
%.sym: %.elf |
@echo |
@echo $(MSG_SYMBOL_TABLE) $@ |
avr-nm -n $< > $@ |
# Link: create ELF output file from object files. |
.SECONDARY : $(TARGET).elf |
.PRECIOUS : $(OBJ) |
%.elf: $(OBJ) |
@echo |
@echo $(MSG_LINKING) $@ |
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) |
# Compile: create object files from C source files. |
%.o : %.c |
@echo |
@echo $(MSG_COMPILING) $< |
$(CC) -c $(ALL_CFLAGS) $< -o $@ |
# Compile: create assembler files from C source files. |
%.s : %.c |
$(CC) -S $(ALL_CFLAGS) $< -o $@ |
# Assemble: create object files from assembler source files. |
%.o : %.S |
@echo |
@echo $(MSG_ASSEMBLING) $< |
$(CC) -c $(ALL_ASFLAGS) $< -o $@ |
# Target: clean project. |
clean: begin clean_list finished end |
clean_list : |
@echo |
@echo $(MSG_CLEANING) |
# $(REMOVE) $(TARGET).hex |
$(REMOVE) $(TARGET).eep |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).cof |
$(REMOVE) $(TARGET).elf |
$(REMOVE) $(TARGET).map |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).a90 |
$(REMOVE) $(TARGET).sym |
$(REMOVE) $(TARGET).lnk |
$(REMOVE) $(TARGET).lss |
$(REMOVE) $(OBJ) |
$(REMOVE) $(LST) |
$(REMOVE) $(SRC:.c=.s) |
$(REMOVE) $(SRC:.c=.d) |
# Automatically generate C source code dependencies. |
# (Code originally taken from the GNU make user manual and modified |
# (See README.txt Credits).) |
# |
# Note that this will work with sh (bash) and sed that is shipped with WinAVR |
# (see the SHELL variable defined above). |
# This may not work with other shells or other seds. |
# |
%.d: %.c |
set -e; $(CC) -MM $(ALL_CFLAGS) $< \ |
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \ |
[ -s $@ ] || rm -f $@ |
# Remove the '-' if you want to see the dependency files generated. |
-include $(SRC:.c=.d) |
# Listing of phony targets. |
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \ |
clean clean_list program |
/branches/v0.60_MicroMag3_Nick666/tags/math.c |
---|
0,0 → 1,118 |
/* |
Copyright 2007, Niklas Nold |
This program (files math.c and math.h) is free software; you can redistribute it and/or modify |
it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; |
either version 3 of the License, or (at your option) any later version. |
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; |
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
Please note: All the other files for the project "Mikrokopter" by H. Buss are under the license (license_buss.txt) published by www.mikrokopter.de |
*/ |
#include "main.h" |
const uint8_t pgm_atan[270] PROGMEM = {0,1,2,3,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,27,28,29,30,31,32,33,33,34,35,36,37,37,38,39,39,40,41,41,42,43,43,44,44,45,46,46,47,47,48,48,49,49,50,50,51,51,52,52,52,53,53,54,54,54,55,55,56,56,56,57,57,57,58,58,58,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,64,65,65,65,65,65,66,66,66,66,66,67,67,67,67,67,67,68,68,68,68,68,68,69,69,69,69,69,69,69,70,70,70,70,70,70,70,70,71,71,71,71,71,71,71,71,72,72,72,72,72,72,72,72,72,73,73,73,73,73,73,73,73,73,73,74,74,74,74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,75,75,75,75,75,75,75,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79}; |
// Arkustangens2 im Gradmaß |
signed int atan2_i(signed int x, signed int y) |
{ |
int i,angle; |
int8_t m; |
if (!x && !y) return 0; //atan2 = 0 für x und y = 0 |
if (y < 0) m=-1; |
else m=1; |
if (x==0) return (90*m); // atan2 = 90° für x = 0 |
i = abs(((float)y / x) * 50); // Berechne i für die Lookup table (Schrittweite atan(x) ist 0.02 -> *50) |
if (i<270) angle = pgm_read_byte(&pgm_atan[i]); // Lookup für 1° bis 79° |
else if (i>5750) angle = 90; // Grenzwert ist 90° |
else if (i>=1910) angle = 89; // 89° bis 80° über Wertebereiche |
else if (i>=1150) angle = 88; |
else if (i>=820) angle = 87; |
else if (i>=640) angle = 86; |
else if (i>=520) angle = 85; |
else if (i>=440) angle = 84; |
else if (i>=380) angle = 83; |
else if (i>=335) angle = 82; |
else if (i>=299) angle = 81; |
else angle = 80; // (i>=270) |
if (x > 0) return (angle*m); // Quadrant I und IV |
else if ((x < 0) && (y >= 0)) return ((angle*-1) + 180); // Quadrant II |
else return (angle - 180); // x < 0 && y < 0 Quadrant III |
} |
const float pgm_sinus_f [91] PROGMEM = {0.000,0.017,0.035,0.052,0.070,0.087,0.105,0.122,0.139,0.156,0.174,0.191,0.208,0.225,0.242,0.259,0.276,0.292,0.309,0.326,0.342,0.358,0.375,0.391,0.407,0.423,0.438,0.454,0.469,0.485,0.500,0.515,0.530,0.545,0.559,0.574,0.588,0.602,0.616,0.629,0.643,0.656,0.669,0.682,0.695,0.707,0.719,0.731,0.743,0.755,0.766,0.777,0.788,0.799,0.809,0.819,0.829,0.839,0.848,0.857,0.866,0.875,0.883,0.891,0.899,0.906,0.914,0.921,0.927,0.934,0.940,0.946,0.951,0.956,0.961,0.966,0.970,0.974,0.978,0.982,0.985,0.988,0.990,0.993,0.995,0.996,0.998,0.999,0.999,1.000,1.000}; |
inline float pgm_read_float(const float *addr) |
{ |
union |
{ |
uint16_t i[2]; // 2 16-bit-Worte |
float f; |
} u; |
u.i[0]=pgm_read_word((PGM_P)addr); |
u.i[1]=pgm_read_word((PGM_P)addr+2); |
return u.f; |
} |
// Kosinusfunktion im Gradmaß |
float cos_f(signed int winkel) |
{ |
return (sin_f(90-winkel)); |
} |
// Sinusfunktion im Gradmaß |
float sin_f(signed int winkel) |
{ |
short int m,n; |
float sinus; |
//winkel = winkel % 360; |
if (winkel < 0) |
{ |
m = -1; |
winkel = abs(winkel); |
} |
else m = +1; |
// Quadranten auswerten |
if ((winkel > 90 ) && (winkel <= 180)) {winkel = 180 - winkel; n = 1;} |
else if ((winkel > 180 ) && (winkel <= 270)) {winkel = winkel - 180; n = -1;} |
else if ((winkel > 270) && (winkel <= 360)) {winkel = 360 - winkel; n = -1;} |
else n = 1; //0 - 90 Grad |
sinus = pgm_read_float(&pgm_sinus_f[winkel]); |
return (sinus*m*n); |
} |
const uint8_t pgm_asin[201] PROGMEM = {0,0,1,1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9,10,10,10,11,11,11,12,12,12,12,13,13,13,14,14,14,14,15,15,15,16,16,16,17,17,17,17,18,18,18,19,19,19,20,20,20,20,21,21,21,22,22,22,23,23,23,24,24,24,25,25,25,25,26,26,26,27,27,27,28,28,28,29,29,29,30,30,30,31,31,31,32,32,32,33,33,33,34,34,34,35,35,35,36,36,37,37,37,38,38,38,39,39,39,40,40,41,41,41,42,42,42,43,43,44,44,44,45,45,46,46,46,47,47,48,48,49,49,49,50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57,58,58,59,59,60,60,61,62,62,63,64,64,65,66,66,67,68,68,69,70,71,72,73,74,75,76,77,79,80,82,84,90}; |
// Akurssinusfunktion im Gradmaß |
int8_t asin_i(signed int i) |
{ |
signed char m; |
if (i < 0) {m=-1;i=abs(i);} |
else m=1; |
return (pgm_read_byte(&pgm_asin[i]) * m); |
} |
/branches/v0.60_MicroMag3_Nick666/tags/math.h |
---|
0,0 → 1,11 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Peter Muehlenbrock |
// Definitionen fuer Modul math |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
extern signed int atan2_i(signed int x, signed int y); |
extern float cos_f(signed int winkel); |
extern float sin_f(signed int winkel); |
extern int8_t asin_i(signed int i); |
/branches/v0.60_MicroMag3_Nick666/tags/menu.c |
---|
0,0 → 1,124 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
unsigned int TestInt = 0; |
#define ARRAYGROESSE 10 |
unsigned char Array[ARRAYGROESSE] = {1,2,3,4,5,6,7,8,9,10}; |
char DisplayBuff[80] = "Hallo Welt"; |
unsigned char DispPtr = 0; |
unsigned char RemoteTasten = 0; |
#define KEY1 0x01 |
#define KEY2 0x02 |
#define KEY3 0x04 |
#define KEY4 0x08 |
#define KEY5 0x10 |
void LcdClear(void) |
{ |
unsigned char i; |
for(i=0;i<80;i++) DisplayBuff[i] = ' '; |
} |
void Menu(void) |
{ |
static unsigned char MaxMenue = 11,MenuePunkt=0; |
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); } |
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); } |
if((RemoteTasten & KEY1) && (RemoteTasten & KEY2)) MenuePunkt = 0; |
LCD_printfxy(17,0,"[%i]",MenuePunkt); |
switch(MenuePunkt) |
{ |
case 0: |
LCD_printfxy(0,0,"++ MikroKopter ++"); |
LCD_printfxy(0,1,"V%d.%d",VERSION_HAUPTVERSION, VERSION_NEBENVERSION); |
LCD_printfxy(0,2,"Setting: %d ",GetActiveParamSetNumber()); |
LCD_printfxy(0,3,"(c) Holger Buss"); |
// if(RemoteTasten & KEY3) TestInt--; |
// if(RemoteTasten & KEY4) TestInt++; |
break; |
case 1: |
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
LCD_printfxy(0,0,"Hoehe: %5i",HoehenWert); |
LCD_printfxy(0,1,"SollHoehe: %5i",SollHoehe); |
LCD_printfxy(0,2,"Luftdruck: %5i",MessLuftdruck); |
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting); |
} |
else |
{ |
LCD_printfxy(0,1,"Keine "); |
LCD_printfxy(0,2,"Höhenregelung"); |
} |
break; |
case 2: |
LCD_printfxy(0,0,"akt. Lage"); |
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024); |
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024); |
LCD_printfxy(0,3,"Kompass: %5i",KompassValue); |
break; |
case 3: |
LCD_printfxy(0,0,"K1:%4i K2:%4i ",PPM_in[1],PPM_in[2]); |
LCD_printfxy(0,1,"K3:%4i K4:%4i ",PPM_in[3],PPM_in[4]); |
LCD_printfxy(0,2,"K5:%4i K6:%4i ",PPM_in[5],PPM_in[6]); |
LCD_printfxy(0,3,"K7:%4i Kanäle ",PPM_in[7]); |
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 Kanäle ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]); |
break; |
case 5: |
LCD_printfxy(0,0,"Gyro - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i)",AccumulateNick / MessanzahlNick, AdNeutralNick); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AccumulateRoll / MessanzahlRoll, AdNeutralRoll); |
LCD_printfxy(0,3,"Gier %4i (%3i)",AccumulateGier / MessanzahlGier, AdNeutralGier); |
break; |
case 6: |
LCD_printfxy(0,0,"ACC - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i)",accumulate_AccNick / messanzahl_AccNick,NeutralAccX); |
LCD_printfxy(0,2,"Roll %4i (%3i)",accumulate_AccRoll / messanzahl_AccRoll,NeutralAccY); |
LCD_printfxy(0,3,"Hoch %4i (%3i)",Aktuell_az/*accumulate_AccHoch / messanzahl_AccHoch*/,(int)NeutralAccZ); |
break; |
case 7: |
LCD_printfxy(0,1,"Spannung: %5i",UBat); |
LCD_printfxy(0,2,"Empf.Pegel:%5i",SenderOkay); |
break; |
case 8: |
LCD_printfxy(0,0,"Kompass "); |
LCD_printfxy(0,1,"Richtung: %5i",KompassRichtung); |
LCD_printfxy(0,2,"Messwert: %5i",KompassValue); |
LCD_printfxy(0,3,"Start: %5i",KompassStartwert); |
break; |
case 9: |
LCD_printfxy(0,0,"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; |
case 11: |
LCD_printfxy(0,0,"MM3 kalib."); |
LCD_printfxy(0,1,"X_Offset: %3i",X_off); |
LCD_printfxy(0,2,"Y_Offset: %3i",Y_off); |
LCD_printfxy(0,3,"Z_Offset: %3i",Z_off); |
break; |
default: MaxMenue = MenuePunkt - 1; |
MenuePunkt = 0; |
break; |
} |
RemoteTasten = 0; |
} |
/branches/v0.60_MicroMag3_Nick666/tags/menu.h |
---|
0,0 → 1,7 |
void LcdClear(void); |
extern void Menu(void); |
extern char DisplayBuff[80]; |
extern unsigned char DispPtr; |
unsigned char RemoteTasten; |
/branches/v0.60_MicroMag3_Nick666/tags/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/tags/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/tags/printf_P.h |
---|
0,0 → 1,19 |
#ifndef _PRINTF_P_H_ |
#define _PRINTF_P_H_ |
#include <avr/pgmspace.h> |
#define OUT_V24 0 |
#define OUT_LCD 1 |
extern void _printf_P (char, char const *fmt0, ...); |
extern char PrintZiel; |
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args) |
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args) |
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);} |
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);} |
#endif |
/branches/v0.60_MicroMag3_Nick666/tags/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; |
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;} |
signal = (3 * (PPM_in[index]) + signal) / 4; |
//373 entspricht ca. 1.5ms also Mittelstellung |
PPM_diff[index] = signal - PPM_in[index]; |
PPM_in[index] = signal; |
} |
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/tags/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/tags/timer0.c |
---|
0,0 → 1,134 |
#include "main.h" |
volatile unsigned int CountMilliseconds = 0; |
volatile static unsigned int tim_main; |
volatile unsigned char UpdateMotor = 0; |
volatile unsigned int beeptime = 0; |
volatile unsigned int cntKompass = 800; |
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; |
// TCNT0 -= 250;//TIMER_RELOAD_VALUE; |
if(!cnt--) |
{ |
cnt = 9; |
cnt_1ms++; |
cnt_1ms %= 2; |
if(!cnt_1ms) UpdateMotor = 1; |
CountMilliseconds++; |
if(Timeout) Timeout--; |
} |
if(beeptime > 1) |
{ |
beeptime--; |
PORTD |= (1<<PD2); |
} |
else |
PORTD &= ~(1<<PD2); |
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) |
{ |
MM3_timer0(); // Kompass auslesen |
if (!cntKompass--) // Aufruf mit 10 Hz |
{ |
KompassValue = MM3_heading(); |
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180; |
cntKompass = 800; |
} |
} |
} |
void Timer_Init(void) |
{ |
tim_main = SetDelay(10); |
TCCR0B = CK8; |
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM |
OCR0A = 0; |
OCR0B = 120; |
//TCNT0 = -TIMER_RELOAD_VALUE; // reload |
//OCR1 = 0x00; |
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3; |
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22); |
// TIMSK2 |= _BV(TOIE2); |
TIMSK2 |= _BV(OCIE2A); |
TIMSK0 |= _BV(TOIE0); |
OCR2A = 10; |
TCNT2 = 0; |
} |
// ----------------------------------------------------------------------- |
unsigned int SetDelay (unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(CountMilliseconds + t + 1); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
char CheckDelay(unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(((t - CountMilliseconds) & 0x8000) >> 9); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
void Delay_ms(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)); |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Servo ansteuern |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(SIG_OUTPUT_COMPARE2A) |
{ |
static unsigned char timer = 10; |
if(!timer--) |
{ |
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3; |
ServoValue = Parameter_ServoNickControl; |
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512; |
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512; |
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin; |
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax; |
//DebugOut.Analog[10] = ServoValue; |
OCR2A = ServoValue;// + 75; |
timer = EE_Parameter.ServoNickRefresh; |
} |
else |
{ |
TCCR2A =3; |
PORTD&=~0x80; |
} |
} |
/branches/v0.60_MicroMag3_Nick666/tags/timer0.h |
---|
0,0 → 1,14 |
#define TIMER_TEILER CK8 |
#define TIMER_RELOAD_VALUE 250 |
void Timer_Init(void); |
void Delay_ms(unsigned int); |
unsigned int SetDelay (unsigned int t); |
char CheckDelay (unsigned int t); |
extern volatile unsigned int CountMilliseconds; |
extern volatile unsigned char UpdateMotor; |
extern volatile unsigned int beeptime; |
extern volatile unsigned int cntKompass; |
extern int ServoValue; |
/branches/v0.60_MicroMag3_Nick666/tags/twimaster.c |
---|
0,0 → 1,131 |
/*############################################################################ |
############################################################################*/ |
#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); |
} |
//############################################################################ |
//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(); |
twi_state = 0; |
} |
} |
/branches/v0.60_MicroMag3_Nick666/tags/twimaster.h |
---|
0,0 → 1,32 |
/*############################################################################ |
############################################################################*/ |
#ifndef _I2C_MASTER_H |
#define _I2C_MASTER_H |
//############################################################################ |
// I2C Konstanten |
#define SCL_CLOCK 200000L |
#define I2C_TIMEOUT 30000 |
#define I2C_START 0x08 |
#define I2C_REPEATED_START 0x10 |
#define I2C_TX_SLA_ACK 0x18 |
#define I2C_TX_DATA_ACK 0x28 |
#define I2C_RX_SLA_ACK 0x40 |
#define I2C_RX_DATA_ACK 0x50 |
//############################################################################ |
extern unsigned char twi_state; |
extern unsigned char motor; |
extern unsigned char motorread; |
extern unsigned char motor_rx[8]; |
void i2c_init (void); // I2C initialisieren |
char i2c_start (void); // Start I2C |
void i2c_stop (void); // Stop I2C |
char i2c_write_byte (char byte); // 1 Byte schreiben |
#endif |
/branches/v0.60_MicroMag3_Nick666/tags/uart.c |
---|
0,0 → 1,328 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + 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 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[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(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]; |
DebugDisplayAnforderung = 1; |
break; |
case 't':// Motortest |
Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes); |
break; |
case 'v': // Version-Anforderung und Ausbaustufe |
GetVersionAnforderung = 1; |
break; |
case 'g':// "Get"-Anforderung für Debug-Daten |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
DebugGetAnforderung = 1; |
break; |
case 'q':// "Get"-Anforderung für Settings |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes); |
if(tmp_char_arr2[0] != 0xff) |
{ |
if(tmp_char_arr2[0] > 5) tmp_char_arr2[0] = 5; |
ReadParameterSet(tmp_char_arr2[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE); |
} |
else |
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE); |
break; |
case 'l': |
case 'm': |
case 'n': |
case 'o': |
case 'p': // Parametersatz speichern |
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE,3,AnzahlEmpfangsBytes); |
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], RxdBuffer[2] - 'l' + 1); // aktiven Datensatz merken |
Piep(GetActiveParamSetNumber()); |
break; |
} |
// DebugOut.AnzahlZyklen = Debug_Timer_Intervall; |
NeuerDatensatzEmpfangen = 0; |
} |
//############################################################################ |
//Routine für die Serielle Ausgabe |
int uart_putchar (char c) |
//############################################################################ |
{ |
if (c == '\n') |
uart_putchar('\r'); |
//Warten solange bis Zeichen gesendet wurde |
loop_until_bit_is_set(USR, UDRE); |
//Ausgabe des Zeichens |
UDR = c; |
return (0); |
} |
// -------------------------------------------------------------------------- |
void WriteProgramData(unsigned int pos, unsigned char wert) |
{ |
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert; |
// else eeprom_write_byte(&EE_Buffer[pos], wert); |
// Buffer[pos] = wert; |
} |
//############################################################################ |
//INstallation der Seriellen Schnittstelle |
void UART_Init (void) |
//############################################################################ |
{ |
//Enable TXEN im Register UCR TX-Data Enable & RX Enable |
UCR=(1 << TXEN) | (1 << RXEN); |
// UART Double Speed (U2X) |
USR |= (1<<U2X); |
// RX-Interrupt Freigabe |
UCSRB |= (1<<RXCIE); |
// TX-Interrupt Freigabe |
UCSRB |= (1<<TXCIE); |
//Teiler wird gesetzt |
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1); |
//UBRR = 33; |
//öffnet einen Kanal für printf (STDOUT) |
//fdevopen (uart_putchar, 0); |
//sbi(PORTD,4); |
Debug_Timer = SetDelay(200); |
} |
//--------------------------------------------------------------------------------------------- |
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) dis_zeile = 0; |
SendOutData('0' + dis_zeile,0,&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen |
} |
if(GetVersionAnforderung && UebertragungAbgeschlossen) |
{ |
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo)); |
GetVersionAnforderung = 0; |
} |
} |
/branches/v0.60_MicroMag3_Nick666/tags/uart.h |
---|
0,0 → 1,95 |
#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 unsigned char MotorTest[4]; |
struct str_DebugOut |
{ |
unsigned char Digital[13]; |
unsigned int AnzahlZyklen; |
unsigned int Zeit; |
unsigned char Sekunden; |
unsigned int Analog[16]; // 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/tags/version.txt |
---|
0,0 → 1,49 |
------- |
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 |