/branches/v0.60_MicroMag3_Nick666/trunc/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/trunc/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/trunc/Flight-Ctrl_MEGA644_V0_66c.hex |
---|
0,0 → 1,1719 |
:100000000C9436020C9453020C9453020C94530239 |
:100010000C9453020C9453020C9453020C9453020C |
:100020000C9453020C94710B0C9453020C945302D5 |
:100030000C9439140C9453020C9453020C945302F4 |
:100040000C9453020C9453020C94AD0A0C9453027A |
:100050000C94AC040C9453020C9476040C9453024C |
:100060000C946D0C0C9453020C9477130C94530263 |
:100070003007D507D507D5076B074307D507D50741 |
:10008000D507970797079707970797076F07D5072C |
:10009000D5075E07D5076707970CAC0CB50CBF0CEE |
:1000A000DC0CF40C0D0D2A0D470D640D480E8E0F5F |
:1000B000D60F37108D10E11065111F1276129A12AB |
:1000C000D812141390139513A613B413C113B913B4 |
:1000D000C113D5130A0A0D004E65757472616C0068 |
:1000E00048656164696E67486F6C64000A0D5374FB |
:1000F00065756572756E673A20004F4B0A0D000AF0 |
:100100000D4162676C65696368204C756674647242 |
:1001100075636B73656E736F722E2E000A0D4265E8 |
:100120006E75747A6520506172616D657465727365 |
:1001300061747A202564000A0D496E69742E204589 |
:100140004550524F4D3A2047656E6572696572653C |
:100150002044656661756C742D506172616D6574C3 |
:1001600065722E2E2E000A0D3D3D3D3D3D3D3D3D2F |
:100170003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3DAF |
:100180003D3D3D3D3D3D000A0D466C696768744349 |
:100190006F6E74726F6C0A0D48617264776172657C |
:1001A0003A25642E25640A0D536F66747761726573 |
:1001B0003A5625642E2564256320002E0052616E78 |
:1001C00067653A2533692D253369005374656C6C76 |
:1001D000756E673A2025336900536574706F696ED8 |
:1001E00074202025336900536572766F20200050FB |
:1001F0006F7469343A202025336900506F74693375 |
:100200003A202025336900506F7469323A20202546 |
:10021000336900506F7469313A20202533690053E7 |
:10022000746172743A2020202020253569004D65C4 |
:100230007373776572743A202025356900526963BB |
:100240006874756E673A2020253569004B6F6D70B4 |
:100250006173732020202020202000456D70662EC1 |
:10026000506567656C3A253569005370616E6E752F |
:100270006E673A202025356900486F636820253471 |
:100280006920282533692900526F6C6C2025346958 |
:10029000202825336929004E69636B2025346920A5 |
:1002A000282533692900414343202D2053656E736F |
:1002B0006F720047696572202534692028253369EB |
:1002C0002900526F6C6C2025346920282533692958 |
:1002D000004E69636B202534692028253369290085 |
:1002E0004769657220253469202825336929005221 |
:1002F0006F6C6C20253469202825336929004E69EC |
:10030000636B2025346920282533692900477972D9 |
:100310006F202D2053656E736F720050333A253471 |
:1003200069202050343A253469200050313A253470 |
:1003300069202050323A253469200047733A253429 |
:1003400069202047693A25346920004E693A2534EE |
:10035000692020526F3A25346920004B373A253402 |
:100360006920204B383A25346920004B353A253432 |
:100370006920204B363A25346920004B333A253426 |
:100380006920204B343A25346920004B313A25341A |
:100390006920204B323A25346920004B6F6D706123 |
:1003A00073733A20202025356900526F6C6C3A2017 |
:1003B0002020202020253569004E69636B3A2020DB |
:1003C0002020202025356900616B742E204C616748 |
:1003D000650048F668656E726567656C756E6700E6 |
:1003E0004B65696E6520004F666620202020202026 |
:1003F0003A20253569004C756674647275636B3AF2 |
:100400002025356900536F6C6C486F6568653A202C |
:1004100025356900486F6568653A20202020202531 |
:1004200035690028632920486F6C67657220427522 |
:1004300073730053657474696E673A2025642000F5 |
:1004400048573A5625642E25642053573A25642E82 |
:1004500025642563002B2B204D696B726F4B6F70E9 |
:10046000746572202B2B005B25695D0011241FBE73 |
:10047000CFEFD0E1DEBFCDBF11E0A0E0B1E0E6EA12 |
:10048000FAE602C005900D92A23AB107D9F715E03D |
:10049000A2EAB1E001C01D92A23AB107E1F70E94C1 |
:1004A00093020C9452350C94000022E030E0D90104 |
:1004B0000E943E35802D863028F082E0D901082E3A |
:1004C0000E94463599270895FB01863008F085E0A3 |
:1004D000282F2150842F9927A1E42A9FD00111248D |
:1004E000A65FBF4F019724F001900E944635FACFD6 |
:1004F000A2E0B0E0022E0E9446350895FB01282FAD |
:10050000863008F025E0842F99272150A1E42A9F06 |
:10051000D0011124A65FBF4F019724F00E943E3501 |
:100520000192FACF08951F93CF93DF9314B815B8B3 |
:10053000189B02C08BE001C08AE08093000181E833 |
:1005400087B98FEF88B98BE184B981E085B98EE3F3 |
:100550008AB9579A87EF8BB984B7877F84BF809118 |
:1005600060008861809360001092600080ED97E0E9 |
:100570009093C0018093BF011092560210925502D1 |
:100580001092030510920205109254021092530229 |
:100590001092520210925102809100018A3011F49F |
:1005A000289801C0289A0E94180C0E947C060E947C |
:1005B00024140E94670C0E945D1378941092010429 |
:1005C00082E48093020486E080930304209100017A |
:1005D00083E690E09F938F9382E490E09F938F93C4 |
:1005E0001F921F92822F6AE00E949134892F9927CF |
:1005F0009F938F93822F0E94913499279F938F937B |
:1006000087E891E09F938F931F920E94340886E6BB |
:1006100091E09F938F931F920E943408299AA1E042 |
:10062000B0E00E943E35802D2DB73EB7205F3F4F92 |
:100630002DBF823409F43FC087E391E09F938F93ED |
:100640001F920E9434080E944E3210E00F900F90CB |
:100650000F90123049F40E94C93141E46AE275E01A |
:1006600082E00E94640202C0133051F40E944431BF |
:1006700041E46AE275E083E00E94640214E002C093 |
:10068000143010F00E94C93141E46AE275E0812F14 |
:100690000E9464021F5F1630E0F283E022E030E047 |
:1006A000D901082E0E94463582E421503040D901FC |
:1006B000082E0E944635C2E0D0E0DE010E943E35A1 |
:1006C000802D863028F082E0DE01082E0E9446351B |
:1006D00041E46AE275E00E947E02DE010E943E353E |
:1006E000802D863028F082E0DE01082E0E944635FB |
:1006F00099279F938F938CE191E09F938F931F9203 |
:100700000E943408809132050F900F900F900F9047 |
:100710000F9080FD03C0C8EED3E020C08FEF90E0C3 |
:100720009F938F931F920E94340888EE93E00E945B |
:100730005C0BEC010E94E90E0F900F900F90CE0120 |
:100740000E94650B8823D9F38AEF90E09F938F93E3 |
:100750001F920E9434080F900F900F900E949A1ED3 |
:10076000809100018A3011F4289801C0289A80ED08 |
:1007700097E09093C0018093BF0188EE93E090933F |
:10078000FC038093FB0385E58093F6038CEE90E0F9 |
:100790009F938F931F920E943408809132050F908F |
:1007A0000F900F9082FF03C080EE90E002C088EDB2 |
:1007B00090E09F938F931F920E9434080F900F90A8 |
:1007C0000F9084ED90E09F938F931F920E943408C6 |
:1007D0000E942D0F88E893E1909385018093840116 |
:1007E0000F900F900F908091BC01882309F451C0A5 |
:1007F0001092BC010E94CA1F0E94531E209100014A |
:100800002A3011F4289801C0289A80910201882387 |
:1008100019F081508093020180915002882329F0C1 |
:100820008091500281508093500280918401909178 |
:100830008501892B01F585E090E0909385018093F7 |
:1008400084010E94FE1380910301909104018F5F47 |
:100850009F4FF9F4809157028823D9F080E197E205 |
:100860009093C0018093BF0180E890E090930401D1 |
:10087000809303010EC080918401909185010197BE |
:1008800090938501809384012A3011F4289801C047 |
:10089000289A0E9497060E941207CE010E94650BBB |
:1008A000882309F4A0CF209107013091080180919D |
:1008B00042059927281739079CF4809103019091EC |
:1008C00004018F5F9F4F61F480E797E19093C0012F |
:1008D0008093BF0180E093E0909304018093030133 |
:1008E00084E690E00E945C0BEC017DCF1F920F929A |
:1008F0000FB60F9211248F939F93EF93FF938091E4 |
:1009000001018823E1F48091B8019091B901019629 |
:100910009093B9018093B801FC01E853FD4FE08149 |
:10092000ED3019F08639910539F41092B901109221 |
:10093000B80181E080930101E093C60004C01092E9 |
:10094000B9011092B801FF91EF919F918F910F9093 |
:100950000FBE0F901F9018951F920F920FB60F9217 |
:1009600011242F933F934F938F939F93AF93BF93F4 |
:10097000CF93DF93EF93FF938091C6008093A601FE |
:100980004091B301463910F01092B2018091A60156 |
:100990008D3009F05CC08091B201823009F057C0FF |
:1009A0001092B201A42FBB27FD01E75FFB4F3081FE |
:1009B000ED01C65FDB4F28818091B6019091B701B0 |
:1009C000831B9109821B91099F709093B7018093BB |
:1009D000B6019C0196E0369527959A95E1F7235C40 |
:1009E0002093B501982F9F73935C9093B4018081FD |
:1009F000281729F48881981711F491E006C0809196 |
:100A0000A9018F5F8093A90190E08091A7018823BD |
:100A100009F064C0992309F461C081E08093A701C3 |
:100A20004093AA01A55FBB4F8DE08C9380910D048C |
:100A3000823509F053C088E190E02CE00FB6F894BD |
:100A4000A895809360000FBE2093600047C08091FE |
:100A5000B2018130D9F0813018F08230E9F530C030 |
:100A60008091A601833239F48091A701882319F47B |
:100A700081E08093B2018091A60180930B0481E014 |
:100A80008093B3018091A601992715C082E08093DD |
:100A9000B201E42FFF278091A601E55FFB4F808321 |
:100AA0004F5F4093B3012091A6018091B6019091D0 |
:100AB000B701820F911D9093B7018093B6010EC0CC |
:100AC000E42FFF278091A601E55FFB4F8083463925 |
:100AD00038F31092B201E7CF1092B201FF91EF917B |
:100AE000DF91CF91BF91AF919F918F914F913F91A6 |
:100AF0002F910F900FBE0F901F901895DC0120E0F2 |
:100B000030E040E050E0E8ECF2E005C08191280FD1 |
:100B1000311D4F5F5F4F4A175B07C1F73F70C90137 |
:100B200036E0969587953A95E1F7835CFD01E853A9 |
:100B3000FD4F808311962F73235CFD01E853FD4F19 |
:100B40002083A753BD4F8DE08C93109201018091BB |
:100B5000C8028093C6000895EF92FF920F931F93EF |
:100B6000CF93DF937A01722F93E29093C802609340 |
:100B7000C9028093CA0203E010E060E0ABECB2E08F |
:100B800046C0F701E60FF11D90816F5F715019F4B7 |
:100B9000E0E040E00FC0F701E60FF11D40816F5F1C |
:100BA000715011F4E0E006C0F701E60FF11DE0819D |
:100BB0006F5F7150892F86958695835C8C9355273E |
:100BC000892F99278370907024E0880F991F2A95A8 |
:100BD000E1F79A0194E0369527959A95E1F7822BF3 |
:100BE000835CED0189834F705070440F551F440F93 |
:100BF000551F8E2F8295869586958370842B835CF6 |
:100C00008A83EF73E35CEB830C5F1F4F14967723AB |
:100C100009F0B7CFC8010E947E05E6E0CDB7DEB788 |
:100C20000C9429351F93CF93DF93EC0170E0A22F32 |
:100C3000BB27129748C0E42FFF27E55FFB4F3081A9 |
:100C40004F5FE42FFF27E55FFB4F50814F5FE42F9D |
:100C5000FF27E55FFB4F10814F5FE42FFF27E55F24 |
:100C6000FB4F20814F5F842F9927A817B90774F194 |
:100C70005D53FE01E70FF11D3D53330F330F852FF9 |
:100C800082958F70382B3083613001F1912F9D5305 |
:100C90007F5FFE01E70FF11D71505295507F892F44 |
:100CA00086958695582B508363506F3F79F07E5F11 |
:100CB000FE01E70FF11D9295990F990F907C2D532E |
:100CC000922B90837F5F662309F0B5CFDF91CF91A0 |
:100CD0001F9108951F93182F8A3019F48DE00E94F8 |
:100CE0006A068091C00085FFFCCF1093C60080E0AB |
:100CF00090E01F9108950895E1ECF0E088E1808391 |
:100D0000A0ECB0E08C9182608C93808180688083BD |
:100D10008081806480838AE28093C40088EC90E0C4 |
:100D20000E945C0B9093F5038093F40308958091E7 |
:100D30000101882309F475C08091A201882371F014 |
:100D400080910101882351F02BE046EF53E0609140 |
:100D5000C70287E40E94AC051092A2018091F403BF |
:100D60009091F5030E94650B882321F48091A401E2 |
:100D70008823B1F080910101882391F022E441EAB7 |
:100D800054E06091C70284E40E94AC051092A40173 |
:100D900084EF91E00E945C0B9093F5038093F40341 |
:100DA0008091A301882359F180910101882339F1B1 |
:100DB0000E94360F1092A3013091B101932F9F5FD3 |
:100DC0009093B101943021F08091AC01882359F0C7 |
:100DD00026E14EEF54E060E084E30E94AC058FEF23 |
:100DE0008093B1010CC044E1949FA0011124475E9F |
:100DF0005E4F24E160E0832F8F5C0E94AC05809100 |
:100E0000A501882371F080910101882351F02AE027 |
:100E100041E054E06091C70286E50E94AC05109263 |
:100E2000A5010895A2E0B0E0E8E1F7E00C941035E8 |
:100E30008091A701882309F4BAC08FEF8093020143 |
:100E400080910D049927AA27BB27FC01E356F040A7 |
:100E5000E431F10508F0A9C0E85CFF4F0C94383587 |
:100E60002091AA0143E06BE086EF93E00E94120616 |
:100E70008091E7019091F803892B8093E70181E04D |
:100E80008093A40192C02091AA0143E062E0CE01C8 |
:100E900001960E9412068091E7019981892B809327 |
:100EA000E7018A818F3F21F481E08093AC0102C089 |
:100EB0001092AC0181E08093A30177C02091AA0138 |
:100EC00043E064E08DEA91E00E9412066EC081E08A |
:100ED0008093A5016AC081E08093A20166C0209141 |
:100EE000AA0143E062E0CE0101960E9412068981C8 |
:100EF0008F3F89F0863010F085E0898341E46AE213 |
:100F000075E089810E947E02898121E44AE255E0F0 |
:100F10006091C70208C01091C7020E94550221E4E7 |
:100F20004AE255E0612F855B0E94AC053EC02091EE |
:100F3000AA0143E061E48AE295E00E9412068091F2 |
:100F40000D0441E46AE275E08B560E9464028091D0 |
:100F50000D048B56A2E0B0E0082E0E944635609149 |
:100F6000550577278827992724EC39E040E050E0A1 |
:100F70000E94723460938601709387018093880188 |
:100F800090938901609156057727882799270E94B9 |
:100F9000723460938A0170938B0180938C019093DB |
:100FA0008D010E9455020E94B51F1092A701E3E037 |
:100FB000CE5F0C942C35982F8091E304813069F436 |
:100FC0008091E601E82FFF27E75EFE4F90838F5F59 |
:100FD0008093E60121E030E005C0892F0E946A0677 |
:100FE000282F3327C90108951F93182F04C080E3C9 |
:100FF0000E94DB0711501116D4F31F9108951F931F |
:10100000182F04C080E20E94DB0711501116D4F3A0 |
:101010001F9108950F931F93CF93DF938C01EB01E2 |
:1010200008C0F8010F5F1F4FE4918E2F0E94DB076D |
:1010300021972097B1F7DF91CF911F910F910895DC |
:101040000F931F93CF93DF938C01EB0106C0F80140 |
:1010500081918F010E94DB0721972097C1F7DF91D3 |
:10106000CF911F910F910895A3E3B0E0EAE3F8E078 |
:101070000C94013529968FAD29978093E304CE0116 |
:10108000855B9F4F9D838C832B968EAD9FAD2B9759 |
:101090009FA78EA722243324210102C0130124011B |
:1010A0000EA51FA502C00F5F1F4FF801F490FF208F |
:1010B00019F0F5E2FF16B9F7B8018EA59FA5681BD8 |
:1010C000790B11F00E940A08FF2009F442C20F5F59 |
:1010D0001F4F1FA70EA71982AC81BD811BAA1AAA98 |
:1010E0009FEF99ABEEA5FFA5CF0101969FA78EA715 |
:1010F000B49095E7B91621F08B2D8062883789F47A |
:10110000EBA9E0FF07C02D903D904D905C901397A8 |
:10111000149607C08D919C9111971C01442455246D |
:101120001296F0E2BF1621F489818823D9F685C092 |
:1011300083E2B81609F483C09AE2B91621F0EDE211 |
:10114000BE1669F408C0FD011296E081EAABE7FF24 |
:10115000C9CFE195EAABFBA9F061FF7D72C08BE2DC |
:10116000B81609F46AC09EE2B916B1F52EA53FA5DE |
:101170002F5F3F4FEEA5FFA584918A3221F0B82E54 |
:1011800020E030E01BC0FD0112964081518157FFE5 |
:1011900002C04FEF5FEF49AB3FA72EA7A3CFC90116 |
:1011A00003E0880F991F0A95E1F7220F331F280FDC |
:1011B000391F2B0D311D20533040B49031968B2DAB |
:1011C00080538A3060F3FFA7EEA7A90137FF02C062 |
:1011D0004FEF5FEF49AB8DCFF0E3BF1631F48BA932 |
:1011E00084FD80CF80628BAB7DCF8B2D8153893086 |
:1011F000E8F420E030E0C901F3E0880F991FFA9588 |
:10120000E1F7220F331F280F391F2B0D311D2053FB |
:101210003040EEA5FFA5CF0101969FA78EA7B49001 |
:101220008B2D80538A3038F32AAB63CF98E6B916FA |
:1012300051F4EBA9E460EBAB55CFB98253CFFBA9D6 |
:10124000F860FBAB4FCF8CE6B81621F49BA99160F8 |
:101250009BAB48CFBD83AC83E3E6BE1639F4129650 |
:10126000BD83AC8312978C918E8318C1F4E4BF16B2 |
:1012700039F084E6B81639F099E6B91659F503C085 |
:10128000EBA9E160EBABFBA9F0FF08C01496BD83AE |
:10129000AC835E904E903E902E900AC01296BD8315 |
:1012A000AC839E918E911C01442437FC4094542CB5 |
:1012B00057FC03C08AE088AB92C0509440943094AD |
:1012C0002094211C311C411C511C8DE289839AE021 |
:1012D00098AB85C0EFE4BE1629F0FFE6BF1639F4DF |
:1012E00088E061C09BA991609BABE8E056C0F0E745 |
:1012F000BF1671F41296BD83AC839E918E911C0132 |
:10130000442455248BA980648BAB78E7B72E5EC04C |
:10131000E3E7BE16D9F51296BD83AC83DE90CE907E |
:10132000C114D10489F488E28E838EE68F8385E729 |
:1013300088878CE689878A8789E28B871C8666E0A6 |
:10134000C62ED12CCC0EDD1EF9A9F7FD13C04F2FF0 |
:10135000552747FD509560E070E0C6010E94FD32C0 |
:10136000009711F419A90DC08C1919A981174CF413 |
:10137000182F07C0F60101900020E9F731971E2FC2 |
:101380001C1919824201310140E094C085E5B8166C |
:1013900031F095E7B91649F4EAE0E8AB1FC0FBA9C4 |
:1013A000F160FBAB8AE088AB19C098E5B91621F073 |
:1013B000E8E7BE1609F06EC0FBA9F3FD02C080E1AC |
:1013C000F2CF211431044104510419F490E198AB97 |
:1013D00005C0EBA9E064EBABF0E1F8AB198289A999 |
:1013E00087FD03C09BA99F7D9BAB21143104410461 |
:1013F000510461F4E9A9EE2349F4662477244301FA |
:101400005EE2C52ED12CCC0EDD1E3EC04EE2C42EB7 |
:10141000D12CCC0EDD1EF8A9EF2EFF2400271127BA |
:10142000C201B101A80197010E94C4346A3020F4BE |
:1014300030E3A32EA60E08C027E5A22EA60E88E54F |
:10144000B81611F49FEDA922F601A2926F01C20114 |
:10145000B101A80197010E94C43439014A012E1438 |
:101460003F044006510618F019012A01D9CFF8A906 |
:10147000F83051F48BA983FF07C090E3A91621F03F |
:1014800080E3F60182936F01CE018C19182F125D53 |
:1014900049A910C0BB2009F45CC0BE821982420178 |
:1014A000310100E096E0C92ED12CCC0EDD1E11E0FA |
:1014B00021E005C0212F042F011B07FD00E08981D9 |
:1014C000882319F0812F8F5F07C09BA996FD02C06A |
:1014D000812F02C0822F8E5FA82EA00EEBA9EE2EC8 |
:1014E000FF2480E3482E512C4E205F2041145104EC |
:1014F00021F48AA98A190E94FF078981882329F08B |
:1015000061E070E0CE01019609C0E6FE09C080E30B |
:101510008A83BB8262E070E0CE0102960E942008BE |
:10152000F0E24F16510421F48AA98A190E94F407A7 |
:10153000802F0E94F407612F772767FD7095C60101 |
:101540000E942008E4FEAACD8AA98A190E94FF07FA |
:10155000A5CDE2E1CD5C0C941D351F920F920FB624 |
:101560000F9211242F933F935F936F937F938F93E9 |
:101570009F93AF93BF938091C30181508093C30128 |
:101580008F3FB9F489E08093C301809106018F5F9A |
:10159000817080930601882319F481E08093BC0157 |
:1015A0008091BA019091BB0101969093BB01809309 |
:1015B000BA018091BF019091C0010297B8F080916B |
:1015C000BF019091C00101979093C0018093BF012A |
:1015D0008091BF019091C0012091030130910401DD |
:1015E00082239323892B09F053C006C08FEF9FEF0E |
:1015F0009093040180930301809100018A3039F4B3 |
:1016000004C05A9A05C0479A03C05A9801C0479827 |
:101610008091320583FF42C0349B0AC08091BD0196 |
:101620009091BE0101969093BE018093BD0136C09A |
:101630008091BD019091BE01892B79F08091BD010F |
:101640009091BE01805A9F4040F48091BD019091DD |
:10165000BE0190934102809340028091400290919C |
:1016600041022091420230914302821B930B845E1F |
:101670009D4F68E671E00E94B134845B9040909386 |
:101680004502809344021092BE011092BD0106C033 |
:10169000809100018A3009F0B6CFB3CFBF91AF91EE |
:1016A0009F918F917F916F915F913F912F910F90BB |
:1016B0000FBE0F901F9018952091BA013091BB0179 |
:1016C0002F5F3F4F820F931F08952091BA013091F1 |
:1016D000BB01821B930B892F9927869580749927CC |
:1016E00008951F920F920FB60F921124EF92FF925E |
:1016F0000F931F932F933F934F935F936F937F931A |
:101700008F939F93AF93BF93CF93DF93EF93FF9309 |
:10171000809105018150809305018F3F09F06DC0D4 |
:1017200083E88093B00080919F01C82FDD27D0937C |
:10173000C201C093C10180915A05E0904C0580FF21 |
:101740001EC0609104027091050280910602909182 |
:101750000702FF240027112720E830E040E050E096 |
:101760000E94E634C801B7010E94723420E032E0E2 |
:1017700040E050E00E94E634C20FD31F1DC06091CC |
:101780000402709105028091060290910702FF24E5 |
:101790000027112720E830E040E050E00E94E634C6 |
:1017A000C801B7010E94723420E032E040E050E00E |
:1017B0000E94E634C21BD30BD093C201C093C10177 |
:1017C0002091C1013091C20180914D0599272817C0 |
:1017D000390734F080914E0599278217930724F436 |
:1017E0009093C2018093C1018091C1018093B300A5 |
:1017F00080914F058093050104C083E08093B00081 |
:101800005F98FF91EF91DF91CF91BF91AF919F9141 |
:101810008F917F916F915F914F913F912F911F9188 |
:101820000F91FF90EF900F900FBE0F901F901895A3 |
:101830008091BA019091BB010B969093C501809362 |
:10184000C40182E085BD83EA84BD17BC88E788BDFA |
:1018500096E096BD83EC8093B0009093B100E0E7F2 |
:10186000F0E0808182608083EEE6F0E0808181603C |
:1018700080838AE08093B3001092B2000895209193 |
:10188000BA013091BB012F5F3F4F280F391F4FEC3A |
:1018900002C040937A008091BA019091BB01B901D6 |
:1018A000681B790B77FFF5CF08952091BA0130912D |
:1018B000BB012F5F3F4F280F391F8091BA019091D4 |
:1018C000BB01A901481B590B57FFF7CF0895109290 |
:1018D0007C008FEC80937A0008951F920F920FB6D0 |
:1018E0000F921124DF92EF92FF920F931F932F9389 |
:1018F0003F934F935F936F937F938F939F93AF9398 |
:10190000BF93CF93DF93EF93FF9310927A00809170 |
:10191000E201D82ED394D092E201E82FFF27EB30DA |
:10192000F10508F038C2E45BFF4F0C943835809124 |
:101930007800909179009093E1018093E00181E03B |
:101940008093E3018091DA019091DB0101969093FD |
:10195000DB018093DA0115C28091780090917900C3 |
:101960009093DF018093DE0190C080917800909188 |
:1019700079009093DD018093DC0184E086C1409181 |
:1019800007015091080180917800909179009A01A7 |
:10199000220F331F240F351F63E070E00E949D3437 |
:1019A000260F371F369527953695279530930801D2 |
:1019B0002093070186E069C18091FC019091FD01AF |
:1019C0002091780030917900821B930B9093E5046D |
:1019D0008093E4048091E4049091E5049093CD0118 |
:1019E0008093CC0187E051C180917800909179007B |
:1019F0002091FA013091FB01821B930B9093F0042C |
:101A00008093EF048091EF049091F0049093CF01C4 |
:101A10008093CE011092E301B4C180910001209126 |
:101A2000E0013091E1018A3049F480917800909191 |
:101A30007900820F931F9695879506C08091780054 |
:101A400090917900820F931F9093CB018093CA01EC |
:101A500081E01BC1809100012091DE013091DF0106 |
:101A60008A3049F48091780090917900820F931F19 |
:101A70009695879506C08091780090917900820FA5 |
:101A8000931F9093C9018093C80182E0FEC08091AA |
:101A900000012091DC013091DD018A3049F4809110 |
:101AA000780090917900820F931F9695879506C0D4 |
:101AB0008091780090917900820F931F9093C701D5 |
:101AC0008093C60185E0E1C0609178007091790053 |
:101AD000E090FE01F090FF010091000210910102E0 |
:101AE000882777FD8095982F0E94B033A801970131 |
:101AF0000E940A330E9493337093D1016093D00106 |
:101B00002091D0013091D101E091E404F091E504FD |
:101B10008091EF049091F00497FF03C09095819518 |
:101B20009F4F64E070E00E94B134EB01CF01F7FFFA |
:101B300003C0909581959F4F64E070E00E94B1349E |
:101B4000260F371F2C0F3D1F3093D1012093D0015A |
:101B50008091D0019091D101029704F16091FE0132 |
:101B60007091FF01809100029091010220E030E02D |
:101B700048E454E40E94BA3388230CF03CC06091DE |
:101B8000FE017091FF0180910002909101022AE014 |
:101B900037ED43EA5CE30E940B3325C08091D0010E |
:101BA0009091D1018F5F9F4F34F56091FE0170914C |
:101BB000FF01809100029091010220E030E046E1B7 |
:101BC00054E40E94BD331816B4F46091FE01709184 |
:101BD000FF0180910002909101022AE037ED43EA73 |
:101BE0005CE30E940A336093FE017093FF018093CF |
:101BF00000029093010281E08093D70180917800E8 |
:101C0000909179009093E7048093E60420913C0240 |
:101C100030913D0240913E0250913F028091D001AF |
:101C20009091D101AA2797FDA095BA2F280F391FAF |
:101C30004A1F5B1F20933C0230933D0240933E02BB |
:101C400050933F02E0903C02F0903D0200913E0232 |
:101C500010913F0260913C0270913D0280913E02E2 |
:101C600090913F0220E034E040E050E00E94E634F2 |
:101C7000E21AF30A040B150BE0923C02F0923D02CB |
:101C800000933E0210933F0283E08093E30179C00A |
:101C90008091F4049091F5042091780030917900BE |
:101CA000820F931F9093F5048093F4048091EC04C9 |
:101CB0008F5F8093EC048091EC04853008F46BC056 |
:101CC000809178009091790090930E0180930D019E |
:101CD0001092EC048091E8049091E9042091F404BE |
:101CE0003091F504821B930B2091580230915902D8 |
:101CF000821B930B9093D9018093D8016091F404D7 |
:101D00007091F504E0900901F0900A0100910B0137 |
:101D100010910C01882777FD8095982FA8019701D5 |
:101D2000220F331F441F551F2E0D3F1D401F511FF3 |
:101D3000620F731F841F951F24E030E040E050E0E5 |
:101D40000E94E6342093090130930A0140930B016D |
:101D500050930C012091E8043091E904809109012D |
:101D600090910A01A0910B01B0910C01281B390B35 |
:101D700030935902209358021092F5041092F40403 |
:101D80000AC08091E30180937C00DD2051F08FEC4C |
:101D900080937A0006C01092E3011092E201109243 |
:101DA0007C00FF91EF91DF91CF91BF91AF919F9117 |
:101DB0008F917F916F915F914F913F912F911F91E3 |
:101DC0000F91FF90EF90DF900F900FBE0F901F903C |
:101DD0001895CF93DF93A3E0B0E00E943E35802DAD |
:101DE000C82FDD27C531D10508F02A97C7BD84E685 |
:101DF00090E00E943F0C80910D0190910E01825560 |
:101E00009340D0F4C0E0D0E017C0C7BD82E390E0BB |
:101E10000E943F0C8BEB91E09F938F931F920E9447 |
:101E2000340880910D0190910E010F900F900F904A |
:101E30008458934020F02196CA3FD10530F3A3E0A7 |
:101E4000B0E00C2E0E944635C093F1048CE291E084 |
:101E50000E943F0CDF91CF910895E9E1F1E080E22B |
:101E6000819391E0E936F907D9F70895FF920F932E |
:101E70001F938091E701282F3327C901817090704B |
:101E8000682F882391F08091E801882311F0815018 |
:101E900002C0809169018093E801E9E1F1E080E20C |
:101EA000819391E0E936F907D9F7A90142705070A2 |
:101EB00021FF0DC08091E8018F5F8093E801E9E187 |
:101EC000F1E080E2819391E0E936F907D9F76623E2 |
:101ED00021F0452B11F01092E80181E18093E60199 |
:101EE0008091E80199279F938F9387E694E09F93D1 |
:101EF0008F9381E08F930E9434088091E8010F90C6 |
:101F00000F900F900F900F90E82FFF27EB30F10507 |
:101F100008F0C8C3E95AFF4F0C9438351092E60117 |
:101F200085E594E09F938F9311E01F930E943408FE |
:101F300084E18093E6012091000183E690E09F9385 |
:101F40008F9382E490E09F938F931F921F92822F32 |
:101F50006AE00E949134892F99279F938F93822F53 |
:101F60000E94913499279F938F9380E494E09F93EC |
:101F70008F931F930E94340888E28093E6010E94A9 |
:101F8000550299279F938F9383E394E09F938F93B8 |
:101F90001F930E9434088CE38093E60183E294E06F |
:101FA0009F938F931F930E9434089CC280913205A7 |
:101FB00080FF44C01092E60180915802909159022E |
:101FC0009F938F9384E194E09F938F9311E01F93ED |
:101FD0000E94340884E18093E60180915A02909136 |
:101FE0005B029F938F9385E094E09F938F931F9361 |
:101FF0000E94340888E28093E60180910D0190915F |
:102000000E019F938F9386EF93E09F938F931F937F |
:102010000E9434088CE38093E6018091F1049927B3 |
:102020009F938F9387EE93E09F938F931F930E94CC |
:1020300034088DB79EB744968DBF39C384E1809331 |
:10204000E60180EE93E09F938F9311E01F930E942F |
:10205000340888E28093E60182ED93E09F938F93AA |
:102060001F930E9434088DB79EB70696E5CF109255 |
:10207000E60188EC93E09F938F9311E01F930E94F9 |
:10208000340884E18093E6016091040270910502B6 |
:10209000809106029091070220E034E040E050E099 |
:1020A0000E94E6345F934F933F932F9389EB93E025 |
:1020B0009F938F931F930E94340888E28093E601D8 |
:1020C00060910C0270910D0280910E0290910F02AE |
:1020D00020E034E040E050E00E94E6345F934F930C |
:1020E0003F932F938AEA93E09F938F931F930E94CD |
:1020F00034088CE38093E601809140029091410284 |
:102100009F938F938BE993E09F938F931F930E94EC |
:1021100034088DB79EB746968FCF1092E601809116 |
:1021200002059091030520910005309101059F93D0 |
:102130008F933F932F938BE893E09F938F9311E0BE |
:102140001F930E94340884E18093E6018091060584 |
:102150009091070520910405309105059F938F9379 |
:102160003F932F938BE793E09F938F931F930E944E |
:10217000340888E28093E60180910A0590910B056E |
:1021800020910805309109059F938F933F932F93DA |
:102190008BE693E09F938F931F930E9434088CE308 |
:1021A0008093E60180910E0590910F0520910C051A |
:1021B00030910D059F938F933F932F938BE593E081 |
:1021C0007BC01092E601E0912B05FF27EE0FFF1F69 |
:1021D000E250FB4F20813181E0912A05FF27EE0F6D |
:1021E000FF1FE250FB4F808191813F932F939F937C |
:1021F0008F938BE493E09F938F9311E01F930E9442 |
:10220000340884E18093E601E0912D05FF27EE0F6D |
:10221000FF1FE250FB4F20813181E0912C05FF2709 |
:10222000EE0FFF1FE250FB4F808191813F932F9370 |
:102230009F938F938BE393E09F938F931F930E94C1 |
:10224000340888E28093E601E0912F05FF27EE0F26 |
:10225000FF1FE250FB4F20813181E0912E05FF27C7 |
:10226000EE0FFF1FE250FB4F808191813F932F9330 |
:102270009F938F938BE293E09F938F931F930E9482 |
:1022800034088CE38093E601E0913105FF27EE0FDF |
:10229000FF1FE250FB4F20813181E0913005FF2785 |
:1022A000EE0FFF1FE250FB4F808191813F932F93F0 |
:1022B0009F938F938BE193E09F938F931F930E9443 |
:1022C00034088DB79EB74C96B7CE1092E6018DE0DC |
:1022D00093E09F938F9311E01F930E9434080F9017 |
:1022E0000F900F90809100018A3009F04AC084E17C |
:1022F0008093E6014091F0015091F1018091C60177 |
:102300009091C7012091F0013091F1015F934F93BB |
:10231000821B930B9F938F938EEF92E09F938F93EB |
:102320001F930E94340888E28093E6014091F201F5 |
:102330005091F3018091C8019091C9012091F2015F |
:102340003091F3015F934F93821B930B9F938F9375 |
:102350008FEE92E09F938F931F930E9434088CE33B |
:102360008093E6018091F4019091F501209194050C |
:10237000309195059F938F933F932F9380EE92E03A |
:1023800055C084E18093E6018091F0019091F101C4 |
:102390002091C6013091C701E091F001F091F10167 |
:1023A00062E070E00E94B1347F936F932E1B3F0B6D |
:1023B0003F932F9381ED92E09F938F931F930E9401 |
:1023C000340888E28093E6018091F2019091F30154 |
:1023D0002091C8013091C901E091F201F091F3011F |
:1023E00062E070E00E94B1347F936F932E1B3F0B2D |
:1023F0003F932F9382EC92E09F938F931F930E94C1 |
:1024000034088CE38093E6018091F4019091F5010A |
:10241000209194053091950562E070E00E94B134FE |
:102420007F936F933F932F9383EB92E09F938F93D0 |
:102430001F930E9434088DB79EB74596FDCD10922C |
:10244000E60186EA92E09F938F9381E0F82EFF9257 |
:102450000E94340884E18093E6018091FA01909112 |
:10246000FB012091CE013091CF019F938F933F9339 |
:102470002F9387E992E09F938F93FF920E943408F5 |
:1024800088E28093E6018091FC019091FD0120910A |
:10249000CC013091CD019F938F933F932F9388E888 |
:1024A00092E09F938F93FF920E9434088CE3809375 |
:1024B000E6016091FE017091FF0180910002909110 |
:1024C000010200917C0510917D050E9493337F935A |
:1024D0006F931F930F9389E792E09F938F93FF92DF |
:1024E0000E9434088DB79EB74896A6CD84E18093AC |
:1024F000E60180910701909108019F938F938AE6EE |
:1025000092E09F938F9311E01F930E94340888E21A |
:102510008093E6018091500299279F938F938BE5DA |
:1025200092E09F938F931F930E9434088DB79EB7BC |
:102530000A9682CD1092E6018CE492E09F938F93ED |
:1025400011E01F930E94340884E18093E60180919A |
:102550004402909145029F938F938DE392E09F9365 |
:102560008F931F930E94340888E28093E601809144 |
:102570004002909141029F938F938EE292E09F934D |
:102580008F931F930E9434088CE38093E60180911F |
:102590004202909143029F938F938FE192E09F9329 |
:1025A0008F931F930E9434088DB79EB7429644CDF7 |
:1025B0001092E60180914802909149029F938F9377 |
:1025C00083E192E09F938F9311E01F930E94340860 |
:1025D00084E18093E60180914A0290914B029F939F |
:1025E0008F9387E092E09F938F931F930E9434080C |
:1025F00088E28093E60180914C0290914D029F9376 |
:102600008F938BEF91E09F938F931F930E943408D9 |
:102610008CE38093E60180914E0290914F029F934C |
:102620008F938FEE91E000CD1092E60187EE91E05E |
:102630009F938F9311E01F930E94340884E180934D |
:10264000E60180919F0199279F938F9389ED91E0F7 |
:102650009F938F931F930E94340888E28093E60132 |
:102660008091C1019091C2019F938F938BEC91E077 |
:102670009F938F931F930E9434088CE38093E6010D |
:1026800080914E0599279F938F9380914D059927AF |
:102690009F938F938DEB91E09F938F931F930E9455 |
:1026A0003408C7CC8150809369011092E8011092E0 |
:1026B000E7011F910F91FF9008951092B9008AE2EF |
:1026C0008093B800089585EA8093BC0080E090E094 |
:1026D000089584E98093BC0008951092B900809316 |
:1026E000BB0085E88093BC0080E090E008951F92D5 |
:1026F0000F920FB60F9211248F939F93EF93FF9336 |
:102700008091E9018F5F8093E9018150E82FFF27D5 |
:10271000E830F10508F064C0EE59FF4F0C943835ED |
:102720008091EA01880F8E5A09C08091EA018F5F7B |
:102730008093EA01815027C080916F051092B90003 |
:102740008093BB0085E88093BC004AC084E98093F5 |
:10275000BC008091EA01843018F41092E90102C0B3 |
:102760001092EA0185EAEFCF8091EB01880F8D5A34 |
:10277000E5CF8091BB00E091EB01FF27EA50FB4FD2 |
:1027800080838091EB01813039F08130A8F2823072 |
:1027900031F0833029F506C080917405CFCF809148 |
:1027A0008C05CCCF80918E05C9CF8091EB019091A3 |
:1027B000BB00E82FFF27EA50FB4F94838F5F809385 |
:1027C000EB01843010F01092EB0184E98093BC009F |
:1027D0008AE090E090938501809384011092E90152 |
:1027E0008091BC0080688093BC00FF91EF919F9125 |
:1027F0008F910F900FBE0F901F9018954CEB50E0EB |
:1028000084E9DA018C931092E9012BEB30E0F901B5 |
:1028100080811092EA0180E88C931092BD001092A2 |
:10282000BA001082E9EBF0E01082A8EBB0E01C9255 |
:1028300010828AE28C9385EADA018C931082F90186 |
:10284000108285E88C93089583EC80938100EFE6F5 |
:10285000F0E08081806280831092F5011092F40193 |
:102860001092F3011092F2011092F1011092F00116 |
:1028700008951F920F920FB60F9211240F931F937A |
:102880002F933F934F935F936F937F938F939F9378 |
:10289000AF93BF93CF93DF93EF93FF932091860085 |
:1028A000309187008091EE019091EF01281B390B48 |
:1028B00080918600909187009093EF018093EE01C4 |
:1028C000C9018D5D95408356994148F481E090E0BF |
:1028D0009093ED018093EC0110926A0167C0C09162 |
:1028E000EC01D091ED01CA30D1050CF05FC0C901F7 |
:1028F0008B5F9040845B914008F040C0A901425D2D |
:102900005140FE01EE0FFF1FE250FB4F808191818D |
:10291000FA01E81BF90BCF01F7FF03C090958195F1 |
:102920009F4F06974CF480915002883C28F4809188 |
:102930005002865F80935002FE01EE0FFF1F8F0151 |
:1029400002501B4FD8012D913C91C901880F991F4E |
:10295000820F931F840F951F64E070E00E94B134D2 |
:10296000D8018D919C9111979B01281B390BEC5E2E |
:10297000FA4F3183208311967C936E93FE0131963A |
:10298000F093ED01E093EC01E530F10519F45D9A67 |
:102990005C980BC05D98E630F10511F45C9A05C0B7 |
:1029A0005C98379711F45B9A01C05B98FF91EF91A7 |
:1029B000DF91CF91BF91AF919F918F917F916F9157 |
:1029C0005F914F913F912F911F910F910F900FBEEB |
:1029D0000F901F901895A2E0B0E0E1EFF4E10C94A5 |
:1029E00001358091F4019091F5012091CA01309157 |
:1029F000CB01821B930B9093950580939405809156 |
:102A0000C8019091C9012091F2013091F301821B1C |
:102A1000930B90936E0580936D058091C601909104 |
:102A2000C7012091F0013091F101821B930B90932B |
:102A3000760580937505E0909105F0909205609180 |
:102A4000CE017091CF010027F7FC0095102F882749 |
:102A500077FD8095982F2CE030E040E050E00E9418 |
:102A60007234E60EF71E081F191FC801B70122E0D5 |
:102A700030E040E050E00E94E6343093920520932D |
:102A80009105E0909B05F0909C056091CC017091C0 |
:102A9000CD010027F7FC0095102F882777FD809542 |
:102AA000982F2CE030E040E050E00E947234E60EB7 |
:102AB000F71E081F191FC801B70122E030E040E0EF |
:102AC00050E00E94E63430939C0520939B05609172 |
:102AD0007C0570917D052091D0013091D10188272E |
:102AE00077FD8095982F442737FD4095542F620F2E |
:102AF000731F841F951F22E030E040E050E00E94E9 |
:102B0000E63430937D0520937C05209114023091AA |
:102B1000150240911602509117026091CE017091FA |
:102B2000CF01CB01880F991F860F971F880F991F20 |
:102B3000880F991FAA2797FDA095BA2F280F391F34 |
:102B40004A1F5B1F20931402309315024093160214 |
:102B500050931702209118023091190240911A02E5 |
:102B600050911B026091CC017091CD01CB01880F77 |
:102B7000991F860F971F880F991F880F991FAA27E3 |
:102B800097FDA095BA2F280F391F4A1F5B1F20936E |
:102B900018023093190240931A0250931B0220919D |
:102BA0001C0230911D0240911E0250911F02809123 |
:102BB000E6049091E704805C9240AA2797FDA095D7 |
:102BC000BA2F280F391F4A1F5B1F20931C02309316 |
:102BD0001D0240931E0250931F0220913402309137 |
:102BE00035024091360250913702809194059091C0 |
:102BF0009505AA2797FDA095BA2F280F391F4A1FC0 |
:102C00005B1F209334023093350240933602509379 |
:102C10003702209138023091390240913A025091A6 |
:102C20003B028091940590919505AA2797FDA09568 |
:102C3000BA2F280F391F4A1F5B1F20933802309389 |
:102C4000390240933A0250933B02209160022A835A |
:102C5000222309F06BC080916102882309F066C0CD |
:102C60008091320586FF62C0609124027091250236 |
:102C70008091260290912702E0909405F0909505AE |
:102C8000A0906A02BB24CC24DD2420E030E140E0A7 |
:102C900050E00E94E6340027F7FC0095102FCA018F |
:102CA000B901A80197010E947234A60195010E9402 |
:102CB000723420E038E040E050E00E94E634209397 |
:102CC000AF023093B0024093B1025093B2026091D0 |
:102CD0002C0270912D0280912E0290912F02E09093 |
:102CE0009405F090950520E030E140E050E00E942E |
:102CF000E6340027F7FC0095102FCA01B901A8019E |
:102D000097010E947234A60195010E94723420E05E |
:102D100038E040E050E00E94E6342093AB0230936C |
:102D2000AC024093AD025093AE0210C01092AB02C1 |
:102D30001092AC021092AD021092AE021092AF024D |
:102D40001092B0021092B1021092B20280916D0501 |
:102D500090916E052090AF023090B0024090B10289 |
:102D60005090B202820D931D90936E0580936D0575 |
:102D700000916D0510916E05A090AB02B090AC0271 |
:102D8000C090AD02D090AE0280916B02682E772485 |
:102D900088249924C601B501A40193010E947234CC |
:102DA00020E032E040E050E00E94E634020F131FC2 |
:102DB00010936E0500936D05209130023091310221 |
:102DC000409132025091330280916D0590916E05D1 |
:102DD000AA2797FDA095BA2F280F391F4A1F5B1FFE |
:102DE00020933002309331024093320250933302E9 |
:102DF00020912C0230912D0240912E0250912F02F1 |
:102E000080916D0590916E0560915C0270915D02FC |
:102E1000861B970BAA2797FDA095BA2F280F391F5D |
:102E20004A1F5B1F20932C0230932D0240932E02E9 |
:102E300050932F0280912C0290912D02A0912E028E |
:102E4000B0912F02E0908A01F0908B0100918C01EB |
:102E500010918D01E816F9060A071B0704F580E1B9 |
:102E600097E2A0E0B0E08E199F09A00BB10B809310 |
:102E70002C0290932D02A0932E02B0932F028091EA |
:102E80002C0290912D02A0912E02B0912F028093DE |
:102E9000300290933102A0933202B093330220911A |
:102EA0002C0230912D0240912E0250912F02882742 |
:102EB0009927DC018E199F09A00BB10B2817390740 |
:102EC0004A075B0704F580EF98EDAFEFBFEFE80E20 |
:102ED000F91E0A1F1B1FE0922C02F0922D02009394 |
:102EE0002E0210932F0280912C0290912D02A0911E |
:102EF0002E02B0912F028093300290933102A09362 |
:102F00003202B09333028091C8019091C9010F97AA |
:102F100034F488E19CEF90936E0580936D05809169 |
:102F2000C8019091C901079734F480E398EF90931A |
:102F30006E0580936D059091000199839A30A9F4F4 |
:102F40008091C8019091C901835F934034F088EE6D |
:102F500093E090936E0580936D058091C8019091E8 |
:102F6000C9018A5F9340DCF014C08091C801909140 |
:102F7000C901855E974034F088EE93E090936E052A |
:102F800080936D058091C8019091C901835F97403E |
:102F900034F080ED97E090936E0580936D058091FD |
:102FA0007505909176058A199B0990937605809313 |
:102FB00075050091750510917605C201B101A40156 |
:102FC00093010E94723420E032E040E050E00E9421 |
:102FD000E634021B130B10937605009375052091C0 |
:102FE00028023091290240912A0250912B028091AF |
:102FF000750590917605AA2797FDA095BA2F280F01 |
:10300000391F4A1F5B1F20932802309329024093E7 |
:103010002A0250932B0220912402309125024091E4 |
:103020002602509127028091750590917605609156 |
:103030005E0270915F02861B970BAA2797FDA095F1 |
:10304000BA2F280F391F4A1F5B1F20932402309389 |
:1030500025024093260250932702809124029091EA |
:103060002502A0912602B0912702E0908601F090FF |
:1030700087010091880110918901E816F9060A0775 |
:103080001B0704F580E197E2A0E0B0E08E199F09EC |
:10309000A00BB10B8093240290932502A0932602EB |
:1030A000B09327028091240290912502A0912602DC |
:1030B000B09127028093280290932902A0932A02BC |
:1030C000B0932B02209124023091250240912602D8 |
:1030D0005091270288279927DC018E199F09A00BA0 |
:1030E000B10B281739074A075B0704F580EF98ED05 |
:1030F000AFEFBFEFE80EF91E0A1F1B1FE09224027C |
:10310000F092250200932602109327028091240258 |
:1031100090912502A0912602B09127028093280267 |
:1031200090932902A0932A02B0932B028091C601AA |
:103130009091C7010F9734F488E19CEF9093760546 |
:10314000809375058091C6019091C701079734F46B |
:1031500080E398EF909376058093750599819A3076 |
:10316000A9F48091C6019091C701835F934034F028 |
:1031700088EE93E090937605809375058091C60163 |
:103180009091C7018A5F9340DCF014C08091C60122 |
:103190009091C701855E974034F088EE93E090935C |
:1031A0007605809375058091C6019091C701835F74 |
:1031B000974034F080ED97E0909376058093750505 |
:1031C0008FEC80937A0080916D0590916E059093BD |
:1031D000BA048093B9048091340290913502A09191 |
:1031E0003602B09137028093200290932102A0937F |
:1031F0002202B09323028091240290912502A09193 |
:103200002602B09127028093040290930502A093B6 |
:103210000602B093070280912C0290912D02A0919A |
:103220002E02B0912F0280930C0290930D02A09376 |
:103230000E02B0930F028091280290912902A09172 |
:103240002A02B0912B028093080290930902A09366 |
:103250000A02B0930B028091300290913102A0914A |
:103260003202B09133028093100290931102A09326 |
:103270001202B09313028091320587FF6BC02A813E |
:10328000222309F067C080916102882309F062C09F |
:103290008091750590917605893C91057CF020918F |
:1032A0007505309176058091750590917605880FAA |
:1032B000991F880F991F2052334015C080917505C2 |
:1032C0009091760588539F4FA4F420917505309115 |
:1032D00076058091750590917605880F991F880F66 |
:1032E000991F205E3C4F820F931F90937605809329 |
:1032F000750580916D0590916E05893C91057CF076 |
:1033000020916D0530916E0580916D0590916E054F |
:10331000880F991F880F991F2052334015C0809144 |
:103320006D0590916E0588539F4FA4F420916D0513 |
:1033300030916E0580916D0590916E05880F991FF3 |
:10334000880F991F205E3C4F820F931F90936E054C |
:1033500080936D05209148023091490280912E059D |
:10336000E82FFF27EE0FFF1FE250FB4F8081918176 |
:1033700082599F4F281739071CF42F5F3F4F0CC00D |
:103380008081918182599F4F821793074CF42115B8 |
:10339000310531F0215030403093490220934802EA |
:1033A00020914A0230914B0280912F05E82FFF2790 |
:1033B000EE0FFF1FE250FB4F8081918182599F4F9A |
:1033C000281739071CF42F5F3F4F0CC08081918173 |
:1033D00082599F4F821793074CF42115310531F024 |
:1033E0002150304030934B0220934A0220914C02EE |
:1033F00030914D0280913005E82FFF27EE0FFF1F1F |
:10340000E250FB4F8081918182599F4F28173907E5 |
:103410001CF42F5F3F4F0CC08081918182599F4FD8 |
:10342000821793074CF42115310531F021503040BB |
:1034300030934D0220934C0220914E0230914F0266 |
:1034400080913105E82FFF27EE0FFF1FE250FB4F61 |
:103450008081918182599F4F281739071CF42F5F73 |
:103460003F4F0CC08081918182599F4F82179307F3 |
:103470004CF42115310531F02150304030934F028A |
:1034800020934E02809148029091490297FF05C017 |
:1034900010924902109248020AC08F3F910539F0FC |
:1034A00034F08FEF90E0909349028093480280912E |
:1034B0004A0290914B0297FF05C010924B02109266 |
:1034C0004A020AC08F3F910539F034F08FEF90E047 |
:1034D00090934B0280934A0280914C0290914D024E |
:1034E00097FF05C010924D0210924C020AC08F3F08 |
:1034F000910539F034F08FEF90E090934D02809376 |
:103500004C0280914E0290914F0297FF05C010929D |
:103510004F0210924E020AC08F3F910539F034F0ED |
:103520008FEF90E090934F0280934E02E2E1CE5FE6 |
:103530000C941D3510927A008091C6019091C701BC |
:1035400090937605809375058091C8019091C9018B |
:1035500090936E0580936D058091CA019091CB0187 |
:1035600090939505809394056091CE017091CF0161 |
:10357000882777FD8095982F2CE030E040E050E0E0 |
:103580000E94723470939205609391056091CC0112 |
:103590007091CD01882777FD8095982F0E94723415 |
:1035A00070939C0560939B058091D0019091D1010F |
:1035B00090937D0580937C058FEC80937A00209119 |
:1035C00048023091490280912E05E82FFF27EE0F27 |
:1035D000FF1FE250FB4F8081918182599F4F281736 |
:1035E00039071CF42F5F3F4F0CC0808191818259B5 |
:1035F0009F4F821793074CF42115310531F021506C |
:103600003040309349022093480220914A02309181 |
:103610004B0280912F05E82FFF27EE0FFF1FE2508E |
:10362000FB4F8081918182599F4F281739071CF4E5 |
:103630002F5F3F4F0CC08081918182599F4F82172D |
:1036400093074CF42115310531F02150304030936F |
:103650004B0220934A0220914C0230914D028091FE |
:103660003005E82FFF27EE0FFF1FE250FB4F808150 |
:10367000918182599F4F281739071CF42F5F3F4FC4 |
:103680000CC08081918182599F4F821793074CF41F |
:103690002115310531F02150304030934D022093F7 |
:1036A0004C0220914E0230914F0280913105E82F5B |
:1036B000FF27EE0FFF1FE250FB4F8081918182595F |
:1036C0009F4F281739071CF42F5F3F4F0CC0808194 |
:1036D000918182599F4F821793074CF42115310530 |
:1036E00031F02150304030934F0220934E028091B0 |
:1036F00048029091490297FF05C01092490210922A |
:1037000048020AC08F3F910539F034F08FEF90E006 |
:10371000909349028093480280914A0290914B0213 |
:1037200097FF05C010924B0210924A020AC08F3FC9 |
:10373000910539F034F08FEF90E090934B02809335 |
:103740004A0280914C0290914D0297FF05C0109261 |
:103750004D0210924C020AC08F3F910539F034F0AF |
:103760008FEF90E090934D0280934C0280914E0237 |
:1037700090914F0297FF05C010924F0210924E0297 |
:103780000AC08F3F910539F034F08FEF90E09093AD |
:103790004F0280934E02609155057727882799271D |
:1037A00024EC39E040E050E00E94723460938601DE |
:1037B00070938701809388019093890160938A01B7 |
:1037C00070938B0180938C0190938D0108951F93CA |
:1037D000809135058B3F98F08B3F19F4809148021A |
:1037E0000EC08C3F19F480914A0209C08D3F19F434 |
:1037F00080914C0204C08E3F21F480914E02809350 |
:10380000970180919701882319F41092970104C0C1 |
:103810008F3F11F480939701809134058B3F98F08E |
:103820008B3F19F4809148020EC08C3F19F48091AF |
:103830004A0209C08D3F19F480914C0204C08E3FAA |
:1038400021F480914E028093960180919601882305 |
:1038500019F41092960105C0843618F084E680931E |
:103860009601809136058B3F98F08B3F19F480913B |
:1038700048020EC08C3F19F480914A0209C08D3F66 |
:1038800019F480914C0204C08E3F21F480914E02C5 |
:103890008093980180919801882319F410929801DF |
:1038A00005C0843618F084E680939801809138052D |
:1038B0008B3F98F08B3F19F4809148020EC08C3FEB |
:1038C00019F480914A0209C08D3F19F480914C028D |
:1038D00004C08E3F21F480914E0280939901809123 |
:1038E0009901882319F41092990104C08F3F11F4B3 |
:1038F0008093990180913F058B3F98F08B3F19F49D |
:10390000809148020EC08C3F19F480914A0209C090 |
:103910008D3F19F480914C0204C08E3F21F48091B8 |
:103920004E0280939A0180919A01882319F4109293 |
:103930009A0104C08F3F11F480939A018091400551 |
:103940008B3F98F08B3F19F4809148020EC08C3F5A |
:1039500019F480914A0209C08D3F19F480914C02FC |
:1039600004C08E3F21F480914E0280939B01809190 |
:103970009B018B3010F48AE002C08F3F11F48093DA |
:103980009B01809141058B3F98F08B3F19F480910A |
:1039900048020EC08C3F19F480914A0209C08D3F45 |
:1039A00019F480914C0204C08E3F21F480914E02A4 |
:1039B00080939C0180919C01882319F410929C01B2 |
:1039C00004C08F3F11F480939C01809146058B3F8A |
:1039D00098F08B3F19F4809148020EC08C3F19F487 |
:1039E00080914A0209C08D3F19F480914C0204C0B5 |
:1039F0008E3F21F480914E0280939E0180919E0122 |
:103A0000882319F410929E0104C08F3F11F4809313 |
:103A10009E01809147058B3F98F08B3F19F4809170 |
:103A200048020EC08C3F19F480914A0209C08D3FB4 |
:103A300019F480914C0204C08E3F21F480914E0213 |
:103A40008093660280916602882319F410926602C0 |
:103A500004C08F3F11F480936602809148058B3F2C |
:103A600098F08B3F19F4809148020EC08C3F19F4F6 |
:103A700080914A0209C08D3F19F480914C0204C024 |
:103A80008E3F21F480914E028093670280916702FD |
:103A9000882319F41092670204C08F3F11F48093B9 |
:103AA0006702809149058B3F98F08B3F19F4809114 |
:103AB00048020EC08C3F19F480914A0209C08D3F24 |
:103AC00019F480914C0204C08E3F21F480914E0283 |
:103AD0008093680280916802882319F4109268022A |
:103AE00004C08F3F11F48093680280914A058B3F98 |
:103AF00098F08B3F19F4809148020EC08C3F19F466 |
:103B000080914A0209C08D3F19F480914C0204C093 |
:103B10008E3F21F480914E02809369028091690268 |
:103B2000882319F41092690204C08F3F11F4809326 |
:103B3000690280914B058B3F98F08B3F19F480917F |
:103B400048020EC08C3F19F480914A0209C08D3F93 |
:103B500019F480914C0204C08E3F21F480914E02F2 |
:103B600080939F0180919F01882319F410929F01F7 |
:103B700004C08F3F11F480939F01809150058B3FCB |
:103B800098F08B3F19F4809148020EC08C3F19F4D5 |
:103B900080914A0209C08D3F19F480914C0204C003 |
:103BA0008E3F21F480914E028093A0018091A0016C |
:103BB000882319F41092A00104C08F3F11F4809360 |
:103BC000A001809153058B3F98F08B3F19F48091B1 |
:103BD00048020EC08C3F19F480914A0209C08D3F03 |
:103BE00019F480914C0204C08E3F21F480914E0262 |
:103BF00080936A0280916A02882319F410926A0203 |
:103C000004C08F3F11F480936A02809154058B3F6A |
:103C100098F08B3F19F4809148020EC08C3F19F444 |
:103C200080914A0209C08D3F19F480914C0204C072 |
:103C30008E3F21F480914E0280936B0280916B0243 |
:103C4000882319F410926B0204C08F3F11F4809303 |
:103C50006B0210919E01612F772767FD7095872F6A |
:103C6000972F0E94B03317FF06C020E030E040E8F5 |
:103C700053E40E940B3327E137EB41ED58E30E94F8 |
:103C80002A346093920170939301809394019093EE |
:103C9000950180913D058093930580913C0580932B |
:103CA00077051F91089580915702882301F510929E |
:103CB000740510926F0510928C0510928E058091FC |
:103CC000AD01882311F080936F058091AE018823A8 |
:103CD00011F0809374058091AF01882311F08093D7 |
:103CE0008E058091B001882311F080938C0580911E |
:103CF0006F0599279093BC048093BB048091740551 |
:103D000099279093BE048093BD0480918E059927D6 |
:103D10009093C0048093BF0480918C059927909361 |
:103D2000C2048093C1041092E9011092EA010E943A |
:103D3000631308951092FB011092FA011092FD0195 |
:103D40001092FC0180E090E0A0E0B0E08093FE01E2 |
:103D50009093FF01A0930002B09301021092F10131 |
:103D60001092F0011092F3011092F2011092F501FD |
:103D70001092F40110926A0210926B020E949A1A39 |
:103D800084E690E00E943F0C0E949A1A80913205CE |
:103D900080FF10C080910D0190910E01875B9340D0 |
:103DA00038F480910D0190910E018E5E924010F4D6 |
:103DB0000E94E90E8091C6019091C7019093F10194 |
:103DC0008093F0018091C8019091C9019093F30113 |
:103DD0008093F2018091CA019091CB019093F501FB |
:103DE0008093F4018091F2019091F3019093F70197 |
:103DF0008093F6018091F0019091F1019093F90187 |
:103E00008093F80180919B0590919C0597FF03C0DA |
:103E1000909581959F4F6CE070E00E94B134709353 |
:103E2000FD016093FC01809191059091920597FFAF |
:103E300003C0909581959F4F6CE070E00E94B13473 |
:103E40007093FB016093FA016091E6047091E704BE |
:103E5000882777FD8095982F0E94B0336093FE01EC |
:103E60007093FF018093000290930102109224024C |
:103E70001092250210922602109227021092280218 |
:103E80001092290210922A0210922B0210922C02F8 |
:103E900010922D0210922E0210922F0210923002D8 |
:103EA00010923102109232021092330210923402B8 |
:103EB0001092350210923602109237021092760557 |
:103EC0001092750510926E0510926D051092950571 |
:103ED000109294058091090190910A01A0910B0123 |
:103EE000B0910C019093E9048093E8041092D901F9 |
:103EF0001092D80110923C0210923D0210923E02A4 |
:103F000010923F02809140029091410290934302AF |
:103F1000809342020E94D33282E390E09093C001EA |
:103F20008093BF016091550577278827992724EC56 |
:103F300039E040E050E00E94723460938601709353 |
:103F400087018093880190938901609156057727B6 |
:103F5000882799270E94723460938A0170938B019D |
:103F600080938C0190938D0108951F93182F0EC09C |
:103F700080915702882361F484E690E09093C00119 |
:103F80008093BF018AEF90E00E94550C115080F79A |
:103F90001F910895AAE0B0E0E0EDFFE10C94013537 |
:103FA0000E94EB14299AE0912C05FF27EE0FFF1FCA |
:103FB000E250FB4F2080318028E730E0220E331E94 |
:103FC00037FE02C02224332480915002843608F048 |
:103FD0005BC080910201882399F480910301909144 |
:103FE00004018F5F9F4F61F488E99AE39093C001C9 |
:103FF0008093BF0180E09CE09093040180930301D3 |
:1040000080918D0290918E02009731F001979093EC |
:104010008E0280938D0204C01092570210924602C5 |
:10402000809100018A3011F4289A01C0289880916B |
:10403000880290918902815D974018F18091430533 |
:10404000282E332481E080934602E0912A05FF2741 |
:10405000EE0FFF1FE250FB4F11821082E0912B0503 |
:10406000FF27EE0FFF1FE250FB4F11821082E091FD |
:104070002D05FF27EE0FFF1FE250FB4F118210822C |
:10408000CAC110925702C7C1809150028D3808F4FE |
:10409000C2C1109246028091440522E3829FC00172 |
:1040A000112490938E0280938D0259E225163104DB |
:1040B0006CF080918802909189026FEF8F3F960794 |
:1040C00081F1019690938902809388028091880201 |
:1040D00090918902883C910520F078E227163104FE |
:1040E00004F51092A7021092A8021092A902109251 |
:1040F000AA021092A3021092A4021092A50210929A |
:10410000A6021092340210923502109236021092DA |
:104110003702109238021092390210923A0210922D |
:104120003B0289EC281631040CF4D5C0809157026B |
:10413000882309F070C1E0912D05FF27EE0FFF1FC6 |
:10414000E250FB4F808191818C3491050CF4C0C00A |
:1041500080918C028F5F80938C02893C08F45BC154 |
:1041600029981092570210928C0210928902109294 |
:10417000880280912A05282F3327F901EE0FFF1FAF |
:10418000E250FB4F80819181873491059CF4E0914E |
:104190002B05FF27EE0FFF1FE250FB4F0190F08130 |
:1041A000E02DF7FF03C0F095E195FF4FE734F105EF |
:1041B0000CF46CC080912B05682F7727DB01AA0FC8 |
:1041C000BB1FA250BB4F8D919C91119787349105D5 |
:1041D0003CF0F901EE0FFF1FE250FB4F808191810F |
:1041E0008D919C918734910564F0F901EE0FFF1FCA |
:1041F000E250FB4F808191818734910514F042E0B9 |
:1042000001C041E0FB01EE0FFF1FE250FB4F808138 |
:104210009181863491055CF4F901EE0FFF1FE250A5 |
:10422000FB4F80819181873491050CF043E0FB01C5 |
:10423000EE0FFF1FE250FB4F808191818A5B9F4F01 |
:104240005CF4F901EE0FFF1FE250FB4F808191817A |
:10425000873491050CF044E0660F771F62507B4F66 |
:10426000FB01808191818A5B9F4F5CF4220F331F99 |
:1042700022503B4FD9018D919C91863491050CF4CD |
:1042800045E0A2E0B0E0042E0E9446358091320560 |
:1042900080FF10C080910D0190910E01875B9340CB |
:1042A00038F480910D0190910E018E5E924010F4D1 |
:1042B0000E94E90E0E94550241E46AE275E00E9404 |
:1042C0007E020E949A1E0E9455020E94B51FA3C042 |
:1042D00010928C02A0C0F3E22F1631040CF09BC0A8 |
:1042E00080912D05482F5527FA01EE0FFF1FE25050 |
:1042F000FB4F80819181855B9F4F0CF06DC0809159 |
:104300008B028F5F80938B02893C08F467C088EC36 |
:1043100080938B0281E090E09093890280938802E1 |
:1043200081E08093570210929F021092A002109297 |
:10433000A1021092A2021092340210923502109241 |
:1043400036021092370210923802109239021092FF |
:104350003A0210923B02109224021092250210920F |
:1043600026021092270210922C0210922D02109217 |
:104370002E0210922F028091040290910502A091CA |
:104380000602B09107028093280290932902A0931D |
:104390002A02B0932B0280910C0290910D02A09101 |
:1043A0000E02B0910F028093300290933102A093DD |
:1043B0003202B09333021092A7021092A802109218 |
:1043C000A9021092AA021092A3021092A4021092C3 |
:1043D000A5021092A60202C010928B02440F551F34 |
:1043E00042505B4FDA018D919C918C3491058CF099 |
:1043F00080918A028F5F80938A02893C60F01092DC |
:10440000570288EC80938A021092890210928802E7 |
:1044100002C010928A0280916A01815080936A01E1 |
:1044200080916A018F3F29F080914602882309F428 |
:1044300090C20E94E71B80912A05882E9924D401FE |
:10444000AA0FBB1FFD01E250FB4F408151818091BB |
:104450003905E82FFF27FA87E987AC5EBA4F8D91BF |
:104460009C9120913A0533274E9F30014F9F700C4D |
:104470005E9F700C1124AC01429FC001439F900DC0 |
:10448000529F900D1124680E791E70925202609214 |
:10449000510280912B05A82EBB24F501EE0FFF1FC2 |
:1044A000DF01A250BB4F4D915C91EC5EFA4F8081D1 |
:1044B000918169857A85469F2001479F500C569FC0 |
:1044C000500C1124DC01A29FC001A39F900DB29F4C |
:1044D000900D1124480E591E5092540240925302DE |
:1044E000E0912D05FF27EE0FFF1FE250FB4F80816B |
:1044F0009181909581959F4F90935602809355029C |
:1045000010919B01612F772767FD7095872F972F5B |
:104510000E94B03317FF06C020E030E040E853E4CB |
:104520000E940B3320E030E040E251E40E940B3364 |
:1045300020E030E040E85BE30E942A346B017C011C |
:1045400060939605709397058093980590939905CD |
:1045500010919C01612F772767FD7095872F972F0A |
:104560000E94B03317FF06C020E030E040E853E47B |
:104570000E940B3320E030EE4BE257E40E944D33B3 |
:10458000609388057093890580938A0590938B05C5 |
:104590008091320582FF0CC080E090E0A0E0B0E0A6 |
:1045A0008093880590938905A0938A05B0938B0525 |
:1045B00020E030E040E050E0C701B6010E94BA338D |
:1045C000882364F480E090E0A0E0B0E0809396055A |
:1045D00090939705A0939805B093990520E030E05B |
:1045E00040E050E0609188057091890580918A05CE |
:1045F00090918B050E94BA33882364F480E090E0A8 |
:10460000A0E0B0E08093880590938905A0938A0587 |
:10461000B0938B0580915905682F77278B01047023 |
:10462000107062FDD8C063FDD6C0809104029091E5 |
:104630000502A0910602B091070281569A4EA04051 |
:10464000B04054F189859A8533E0880F991F3A95D7 |
:10465000E1F7A301481B590B5093520240935102BA |
:104660008091040290910502A0910602B091070288 |
:1046700081589843A140B0400CF442C089859A8586 |
:1046800024E0880F991F2A95E1F7481B590B509396 |
:1046900052024093510234C080910402909105026D |
:1046A000A0910602B0910702805A9541AF4FBF4FCB |
:1046B0003CF529853A85B3E0220F331FBA95E1F71F |
:1046C000260D371D3093520220935102809104022F |
:1046D00090910502A0910602B0910702815898437B |
:1046E000A140B0406CF089859A85A4E0880F991F9D |
:1046F000AA95E1F7281B390B3093520220935102FF |
:1047000080910C0290910D02A0910E02B0910F02C7 |
:1047100081569A4EA040B04054F189859A85F3E0C5 |
:10472000880F991FFA95E1F7A201481B590B509386 |
:1047300054024093530280910C0290910D02A0917B |
:104740000E02B0910F0281589843A140B0400CF482 |
:1047500042C029853A85E4E0220F331FEA95E1F74C |
:10476000421B530B509354024093530234C0809128 |
:104770000C0290910D02A0910E02B0910F02805A8E |
:104780009541AF4FBF4F3CF529853A8573E0220F25 |
:10479000331F7A95E1F7240D351D30935402209391 |
:1047A000530280910C0290910D02A0910E02B091E3 |
:1047B0000F0281589843A140B0406CF089859A85DA |
:1047C00054E0880F991F5A95E1F7281B390B309355 |
:1047D000540220935302F501EE0FFF1FE250FB4FEE |
:1047E0002081318180915105482F55274217530769 |
:1047F00034F4012B21F081E08093620211C0F501B5 |
:10480000EE0FFF1FE250FB4F208131818091520556 |
:10481000DA01A81BB1092A173B0714F410926202AF |
:10482000F501EE0FFF1FE250FB4F80819181AA2717 |
:10483000BB27A41BB50B8A179B0734F463FF04C086 |
:1048400081E08093630217C080916302882399F00E |
:10485000AA0CBB1CEEEFF4E0AE0EBF1EF5012081EA |
:104860003181809152059927841B950B82179307FC |
:1048700014F410926302F401EE0FFF1FE250FB4F9D |
:10488000808191814817590734F460FF04C081E0AA |
:104890008093650215C080916502882389F0F40138 |
:1048A000EE0FFF1FE250FB4F2081318180915205B6 |
:1048B000FA01E81BF1092E173F0714F41092650264 |
:1048C000F401EE0FFF1FE250FB4F808191818A17A8 |
:1048D0009B0734F461FF04C081E08093640217C039 |
:1048E00080916402882399F0880C991C2EEF34E0A3 |
:1048F000820E931ED4012D913C91809152059927EF |
:10490000841B950B8217930714F410926402809114 |
:104910006202882321F480916302882321F081E0E0 |
:104920008093610202C01092610280916502882327 |
:1049300021F480916402882351F081E08093600229 |
:104940001092610210926202109263020EC01092E5 |
:10495000600280916102882311F40C94363184E660 |
:1049600090E09093C0018093BF01809150059927FA |
:10497000821593050CF41C0140904602442041F13D |
:104980001092560210925502109252021092510249 |
:1049900010925402109253028DEC9CECACECBDE3EF |
:1049A0008093960590939705A0939805B0939905E9 |
:1049B0008AE097EDA3EABBE380938805909389058D |
:1049C000A0938A05B0938B05109261021092600249 |
:1049D0008091800590918105A0918205B091830519 |
:1049E0002091040230910502409106025091070285 |
:1049F000820F931FA41FB51F80938005909381059C |
:104A0000A0938205B09383058091840590918505DC |
:104A1000A0918605B091870520910C0230910D027E |
:104A200040910E0250910F02820F931FA41FB51FD9 |
:104A30008093840590938505A0938605B0938705A0 |
:104A40008091780590917905A0917A05B0917B05C8 |
:104A5000209108023091090240910A0250910B0204 |
:104A6000820F931FA41FB51F80937805909379053B |
:104A7000A0937A05B0937B058091700590917105A4 |
:104A8000A0917205B091730520911002309111022E |
:104A90004091120250911302820F931FA41FB51F61 |
:104AA0008093700590937105A0937205B093730580 |
:104AB00050906002552029F480916102882309F406 |
:104AC0005CC01092140210921502109216021092FD |
:104AD0001702109218021092190210921A021092E4 |
:104AE0001B0210928005109281051092820510928F |
:104AF0008305109284051092850510928605109208 |
:104B00008705109278051092790510927A05109217 |
:104B10007B0510927005109271051092720510922B |
:104B200073058091240290912502A0912602B091F4 |
:104B300027028093280290932902A0932A02B0931F |
:104B40002B0280912C0290912D02A0912E02B09107 |
:104B50002F028093300290933102A0933202B093DF |
:104B600033021092DB011092DA0110925F02109270 |
:104B70005E0210925D0210925C028091DA019091C7 |
:104B8000DB018F3F910509F008F44FC5552009F06E |
:104B900010C580916102882309F00BC560918005E2 |
:104BA00070918105809182059091830520E031E02C |
:104BB00040E050E00E94E634209380053093810568 |
:104BC000409382055093830560918405709185051B |
:104BD000809186059091870520E031E040E050E02B |
:104BE0000E94E63420938405309385054093860522 |
:104BF00050938705E0903E05FF2400271127209160 |
:104C00001402309115024091160250911702C8010A |
:104C1000B7010E94723420E031E040E050E00E9491 |
:104C2000E6342093140230931502409316025093F9 |
:104C30001702209118023091190240911A025091E6 |
:104C40001B02C801B7010E94723420E031E040E04D |
:104C500050E00E94E63420931802309319024093EA |
:104C60001A0250931B0260911C0270911D028091E8 |
:104C70001E0290911F0220E031E040E050E00E94CF |
:104C8000E63420931C0230931D0240931E02509381 |
:104C90001F02E0908005F09081050091820510913F |
:104CA00083058091140290911502A0911602B09193 |
:104CB0001702E81AF90A0A0B1B0B80915705A82E58 |
:104CC000BB24CC24DD24C801B701A60195010E94B4 |
:104CD000E63439014A0120938002309381024093E7 |
:104CE0008202509383028091800590918105A0916A |
:104CF0008205B09183052091720230917302409138 |
:104D0000740250917502281B390B4A0B5B0B57FF3D |
:104D100007C050954095309521953F4F4F4F5F4FBD |
:104D20002858334140405040A4F5C801B7012CEB4E |
:104D300032E040E050E00E94E63420939B02309342 |
:104D40009C0240939D0250939E0221323105410501 |
:104D500051052CF080E290E0A0E0B0E009C0205EB8 |
:104D60003F4F4F4F5F4F64F480EE9FEFAFEFBFEFC9 |
:104D700080939B0290939C02A0939D02B0939E020D |
:104D800080919B0290919C0290935F0280935E02BF |
:104D90000CC080915E0290915F0262E070E00E9420 |
:104DA000B13470935F0260935E02E0908405F090EE |
:104DB00085050091860510918705809118029091D4 |
:104DC0001902A0911A02B0911B02E81AF90A0A0B03 |
:104DD0001B0BC801B701A60195010E94E6342D8383 |
:104DE0003E834F8358878091840590918505A091DB |
:104DF0008605B091870520916E0230916F02409137 |
:104E0000700250917102281B390B4A0B5B0B57FF44 |
:104E100007C050954095309521953F4F4F4F5F4FBC |
:104E20002858334140405040A4F5C801B7012CEB4D |
:104E300032E040E050E00E94E63420939702309345 |
:104E400098024093990250939A022132310541050C |
:104E500051052CF080E290E0A0E0B0E009C0205EB7 |
:104E60003F4F4F4F5F4F64F480EE9FEFAFEFBFEFC8 |
:104E70008093970290939802A0939902B0939A021C |
:104E8000809197029091980290935D0280935C02CA |
:104E90000CC080915C0290915D0262E070E00E9423 |
:104EA000B13470935D0260935C02809180059091B3 |
:104EB0008105A0918205B091830580937202909341 |
:104EC0007302A0937402B09375028091840590914F |
:104ED0008505A0918605B091870580936E02909319 |
:104EE0006F02A0937002B09371028091240290919E |
:104EF0002502A0912602B091270286199709A809D8 |
:104F0000B9098093240290932502A0932602B093BE |
:104F1000270280912C0290912D02A0912E02B09137 |
:104F20002F022D813E814F815885821B930BA40B4C |
:104F3000B50B80932C0290932D02A0932E02B09378 |
:104F40002F02609178057091790580917A05909192 |
:104F50007B0520E031E040E050E00E94E634209301 |
:104F600078053093790540937A0550937B056091DD |
:104F7000700570917105809172059091730520E024 |
:104F800031E040E050E00E94E63420937005309319 |
:104F900071054093720550937305E0907805F09089 |
:104FA000790500917A0510917B058091140290910A |
:104FB0001502A0911602B0911702E81AF90A0A0B1D |
:104FC0001B0BE0929B02F0929C0200939D021093B7 |
:104FD0009E02A0907005B0907105C0907205D090AF |
:104FE00073058091180290911902A0911A02B09154 |
:104FF0001B02A81AB90ACA0ADB0AA0929702B09249 |
:105000009802C0929902D0929A02E0929302F09292 |
:1050100094020093950210939602A0928F02B09290 |
:105020009002C0929102D0929202809128029091B7 |
:105030002902A0912A02B0912B028E199F09A00B80 |
:10504000B10B8093280290932902A0932A02B09377 |
:105050002B028091300290913102A0913202B091E6 |
:1050600033028A199B09AC09BD09809330029093E1 |
:105070003102A0933202B093330280915C0290918E |
:105080005D029C0173E0220F331F7A95E1F7880FD0 |
:10509000991F820F931F9093E0048093DF04609127 |
:1050A00014027091150280911602909117022AE164 |
:1050B00030E040E050E00E94E6343093C604209394 |
:1050C000C504609118027091190280911A029091A2 |
:1050D0001B022AE130E040E050E00E94E6343093C9 |
:1050E000C8042093C704F092CA04E092C904B092A5 |
:1050F000CC04A092CB0460918005709181058091D1 |
:105100008205909183052AE130E040E050E00E9462 |
:10511000E6343093CE042093CD04609184057091E1 |
:10512000850580918605909187052AE130E040E071 |
:1051300050E00E94E6343093D0042093CF04709264 |
:10514000DC046092DB044D815E815093DE04409369 |
:10515000DD0481E090E090937B0280937A0251E03D |
:10516000E51654E0F50650E0050750E015070CF48D |
:1051700056C080917902882309F44DC0D801C70137 |
:105180005AE0B595A795979587955A95D1F70196C9 |
:1051900090937B0280937A02D801C70143E0B595D2 |
:1051A000A795979587954A95D1F78093800290931C |
:1051B0008102A0938202B093830289589341A04058 |
:1051C000B04064F088E893E1A0E0B0E08093800212 |
:1051D00090938102A0938202B09383028091240273 |
:1051E00090912502A0912602B09127022091800281 |
:1051F000309181024091820250918302821B930B75 |
:10520000A40BB50B8093240290932502A093260251 |
:10521000B09327026AC081E08093790266C0109241 |
:10522000790270E0E7167CEFF7067FEF07077FEF64 |
:1052300017070CF05AC080917802882309F451C0F6 |
:1052400088279927DC018E199F09A00BB10B3AE042 |
:10525000B595A795979587953A95D1F7019690932F |
:105260007B0280937A02C801B70128E030E040E079 |
:1052700050E00E94E63420938002309381024093F4 |
:1052800082025093830228573C4E4F4F5F4F64F485 |
:1052900088E79CEEAFEFBFEF80938002909381028E |
:1052A000A0938202B0938302809124029091250200 |
:1052B000A0912602B09127022091800230918102B4 |
:1052C0004091820250918302821B930BA40BB50B79 |
:1052D0008093240290932502A0932602B093270284 |
:1052E00006C081E08093780228C0109278028091F5 |
:1052F0007A0290917B02049734F083E090E09093DF |
:105300007B0280937A0291E8E916F1040105110508 |
:105310005CF08091F0019091F10120917A0230913E |
:105320007B02820F931F13C0A0E8EA16AFEFFA06C4 |
:10533000AFEF0A07AFEF1A0774F48091F001909174 |
:10534000F10120917A0230917B02821B930B9093A2 |
:10535000F1018093F00181E090E090937B028093D3 |
:105360007A0210927C0210927D0210927E021092BC |
:105370007F02B1E0AB16B4E0BB06B0E0CB06B0E014 |
:10538000DB060CF456C080917702882309F44DC0E7 |
:10539000D601C5012AE0B595A795979587952A95D9 |
:1053A000D1F7019690937B0280937A02D601C501D2 |
:1053B00002E0B595A795979587950A95D1F78093C3 |
:1053C0007C0290937D02A0937E02B0937F02895865 |
:1053D0009341A040B04064F088E893E1A0E0B0E0E1 |
:1053E00080937C0290937D02A0937E02B0937F0213 |
:1053F00080912C0290912D02A0912E02B0912F024B |
:1054000020917C0230917D0240917E0250917F027A |
:10541000821B930BA40BB50B80932C0290932D024F |
:10542000A0932E02B0932F026EC081E0809377028A |
:105430006AC010927702F0E0AF16FCEFBF06FFEFF4 |
:10544000CF06FFEFDF060CF05EC080917602882366 |
:1054500009F451C088279927DC018A199B09AC09F6 |
:10546000BD091AE0B595A795979587951A95D1F737 |
:10547000019690937B0280937A02C601B50124E0E5 |
:1054800030E040E050E00E94E63420937C0230930C |
:105490007D0240937E0250937F0228573C4E4F4F2F |
:1054A0005F4F64F488E79CEEAFEFBFEF80937C0220 |
:1054B00090937D02A0937E02B0937F0280912C0294 |
:1054C00090912D02A0912E02B0912F0220917C028A |
:1054D00030917D0240917E0250917F02821B930B9E |
:1054E000A40BB50B80932C0290932D02A0932E0257 |
:1054F000B0932F020AC081E0809376021092DA0402 |
:105500001092D90430C01092760280917C02909162 |
:105510007D029093DA048093D90480917A0290916D |
:105520007B02049734F083E090E090937B028093B9 |
:105530007A0271E8A716B104C104D1045CF080912D |
:10554000F2019091F30120917A0230917B02820F57 |
:10555000931F13C080E8A8168FEFB8068FEFC80618 |
:105560008FEFD80674F48091F2019091F3012091AD |
:105570007A0230917B02821B930B9093F30180930C |
:10558000F2018091F2019091F3012091F6013091A6 |
:10559000F701821B930B9C01B3E0220F331FBA95D6 |
:1055A000E1F7880F991F820F931F9093D404809383 |
:1055B000D304109214021092150210921602109247 |
:1055C0001702109218021092190210921A021092E9 |
:1055D0001B0210921C0210921D0210921E021092C9 |
:1055E0001F02109280051092810510928205109280 |
:1055F00083051092840510928505109286051092FD |
:105600008705109278051092790510927A0510920C |
:105610007B05109270051092710510927205109220 |
:1056200073051092DB011092DA0180905502909080 |
:105630005602940197FE04C02227332728193909FE |
:10564000253131053CF08091320584FD03C081E0B5 |
:1056500080938402E0903B055901CC24B7FCC094B0 |
:10566000DC2CB401882777FD8095982F2E2D3327C9 |
:10567000442755270E9472349B01AC01C601B50135 |
:105680000E94723420E032E040E050E00E94E634B4 |
:1056900089019A01FF24E89CC001E99C900DF89CC7 |
:1056A000900D112464E070E00E94B134600F711F0E |
:1056B0003B01882477FC8094982C60929F02709222 |
:1056C000A0028092A1029092A20280913402909155 |
:1056D0003502A0913602B091370286199709A809C0 |
:1056E000B9098093340290933502A0933602B093A7 |
:1056F00037028091340290913502A0913602B09128 |
:1057000037028155934CA040B04064F080E593ECA3 |
:10571000A0E0B0E08093340290933502A09336026B |
:10572000B09337028091340290913502A0913602F5 |
:10573000B0913702805B9C43AF4FBF4F64F480EB66 |
:105740009CE3AFEFBFEF8093340290933502A093B8 |
:105750003602B09337028091400290914102892B2A |
:1057600009F492C08091320583FF8EC060910402DB |
:1057700070910502809106029091070220E032E0CC |
:1057800040E050E00E94E634890137FF03C01095E5 |
:1057900001951F4F60910C0270910D0280910E02D5 |
:1057A00090910F0220E032E040E050E00E94E634A9 |
:1057B000B90137FF03C0709561957F4F601771077E |
:1057C0000CF4B80169317105A4F480918402882336 |
:1057D00081F080916C0290916D02892B51F480913F |
:1057E00040029091410290934302809342021092B2 |
:1057F000840220919A013327629FC001639F900D1C |
:10580000729F900D112460E470E00E94B134A901F0 |
:10581000461B570B141615068CF580916C0290915F |
:105820006D02009749F500913402109135022091E4 |
:105830003602309137028091440290914502BC01BA |
:10584000649FC001659F900D749F900D112460E2CC |
:1058500070E00E94B134882777FD8095982F060F5D |
:10586000171F281F391F009334021093350220930D |
:1058700036023093370208C0019702C084EF91E0EE |
:1058800090936D0280936C02809185028150809389 |
:1058900085028F3F09F079C088E18093850260918D |
:1058A0000402709105028091060290910702E09037 |
:1058B0003E05FF2400271127A80197010E94E63426 |
:1058C0003093A4042093A30460910C0270910D0204 |
:1058D00080910E0290910F02A80197010E94E63478 |
:1058E0003093A6042093A504809191059091920590 |
:1058F0009093A8048093A70480919B0590919C05A8 |
:105900009093AA048093A9048091940590919505A1 |
:105910009093AC048093AB0480915802909159020B |
:105920009093AE048093AD0460913C0270913D026F |
:1059300080913E0290913F0220E032E040E050E052 |
:105940000E94E6343093B0042093AF04809140026B |
:10595000909141029093B4048093B3048091070125 |
:10596000909108019093B6048093B5048091500201 |
:1059700099279093B8048093B70480917C05909107 |
:105980007D059093C4048093C3045520A9F06091D1 |
:10599000750570917605882777FD8095982F0E9470 |
:1059A000B03320919605309197054091980550911C |
:1059B00099050E942A3432C0609104027091050258 |
:1059C0008091060290910702E0907505F0907605AF |
:1059D0000E94B033209188053091890540918A0555 |
:1059E00050918B050E942A345B016C010027F7FC63 |
:1059F0000095102FC801B7010E94B0332091960581 |
:105A00003091970540919805509199050E942A344C |
:105A10009B01AC01C601B5010E940B330E94933378 |
:105A20007093760560937505809161028823A9F0D3 |
:105A300060916D0570916E05882777FD8095982F90 |
:105A40000E94B033209196053091970540919805BA |
:105A5000509199050E942A3432C060910C027091D5 |
:105A60000D0280910E0290910F02E0906D05F09072 |
:105A70006E050E94B03320918805309189054091D0 |
:105A80008A0550918B050E942A345B016C01002726 |
:105A9000F7FC0095102FC801B7010E94B033209188 |
:105AA00096053091970540919805509199050E946F |
:105AB0002A349B01AC01C601B5010E940B330E9440 |
:105AC000933370936E0560936D05609194057091AA |
:105AD0009505E0902002F0902102009122021091A1 |
:105AE0002302882777FD8095982F0E94B03320915C |
:105AF00096053091970540919805509199050E941F |
:105B00002A345B016C01C801B7010E94B0332091B7 |
:105B100088053091890540918A0550918B050E9436 |
:105B20002A3420E030E040E05FE30E942A349B0109 |
:105B3000AC01C601B5010E940B330E9493337093F0 |
:105B40009505609394058091750590917605815037 |
:105B5000984034F080E098E0909376058093750546 |
:105B600080917505909176058050984F34F480E0CF |
:105B700098EF909376058093750580916D059091CF |
:105B80006E058150984034F080E098E090936E0567 |
:105B900080936D0580916D0590916E058050984FB2 |
:105BA00034F480E098EF90936E0580936D058091BA |
:105BB0009405909195058150984034F080E098E0EC |
:105BC0009093950580939405809194059091950507 |
:105BD0008050984F34F480E098EF9093950580932F |
:105BE000940580913205992780FFBCC020919701D0 |
:105BF00081FF0EC02233B0F4809158029091590277 |
:105C0000449790935B0280935A02109247020DC012 |
:105C100080913705289FC0011124449790935B021F |
:105C200080935A0281E080934702442021F0109231 |
:105C30005B0210925A022091580230915902409111 |
:105C40005A0250915B02421753070CF08BC08091AF |
:105C50004702882309F486C0241B350B80919801E4 |
:105C60009927AC01249FC001259F900D349F900D72 |
:105C7000112460E170E00E94B1348101061B170B12 |
:105C80002091D8013091D901809196019927BC01CA |
:105C9000269FC001279F900D369F900D112468E02C |
:105CA00070E00E94B134061B170B60913C027091AA |
:105CB0003D0280913E0290913F0220E032E040E0C0 |
:105CC00050E00E94E634CA01B901209199013327BE |
:105CD000442755270E94723420E230E040E050E033 |
:105CE0000E94E6347FEF2E3C370714F42EEC3FEF92 |
:105CF0008091860290918702AC01F4E0440F551F19 |
:105D0000FA95E1F7481B590B2333310514F022E3D0 |
:105D100030E0021B130BCA01800F911F60E170E09D |
:105D20000E94B1347093870260938602809133059C |
:105D30009927681779073CF4281639065CF0909388 |
:105D400087028093860280918602909187022816AE |
:105D5000390624F43092870220928602209086022F |
:105D6000309087023092B2042092B1048091940561 |
:105D700090919505861997099A878987B101882797 |
:105D800077FD8095982F0E94B0337B018C01A98507 |
:105D9000BA85BD01882777FD8095982F0E94B03382 |
:105DA000A80197010E94BD33181634F4C801B70149 |
:105DB0000E9493337A87698717FB109517F910951E |
:105DC000E985FA85BF01882777FD8095982F0E9485 |
:105DD000B033A80197010E94BA33882334F4C80174 |
:105DE000B7010E9493337A87698729853A852536DA |
:105DF00031052CF044E650E05A87498709C069858F |
:105E00007A856C597F4F24F4ACE9BFEFBA87A98734 |
:105E1000B4E12B16310414F41A86198620918E01F0 |
:105E200030918F01409190015091910129833A83E3 |
:105E30004B835C83609175057091760520915102CA |
:105E4000309152024091B3025091B402241B350BA1 |
:105E5000621B730B882777FD8095982F0E94B033C3 |
:105E60009B01AC0169817A818B819C810E942A34DB |
:105E70000E94933370937F0560937E0580917E0529 |
:105E800090917F058C01222717FD2095322F80915C |
:105E9000A7029091A802A091A902B091AA02080FAE |
:105EA000191F2A1F3B1F0093A7021093A8022093DB |
:105EB000A9023093AA021016110612061306ACF4BA |
:105EC000C80117FF03C0909581959F4F60E071E076 |
:105ED0000E94B1346F5F7F4F882777FD8095982FA0 |
:105EE000061B170B280B390B14C0C80117FF03C082 |
:105EF000909581959F4F60E071E00E94B1346F5F93 |
:105F00007F4F882777FD8095982F060F171F281F32 |
:105F1000391F0093A7021093A8022093A90230937F |
:105F2000AA028091A7029091A802A091A902B09123 |
:105F3000AA0281383EE3930730E0A30730E0B307BD |
:105F40002CF080E89EE3A0E0B0E009C08058914CBE |
:105F5000AF4FBF4F64F480E891ECAFEFBFEF809399 |
:105F6000A7029093A802A093A902B093AA026091FD |
:105F70007E0570917F054090920150909301609052 |
:105F8000940170909501882777FD8095982F0E9445 |
:105F9000B0337B018C016091A7027091A8028091BF |
:105FA000A9029091AA020E94B0339B01AC01C301E7 |
:105FB000B2010E942A349B01AC01C801B7010E94C2 |
:105FC0000B330E949333AB0129853A8537FF03C019 |
:105FD000309521953F4F5101A20EB31EAA0CBB1C58 |
:105FE00095014A155B050CF49B01882499248A18B5 |
:105FF0009B08B401821693060CF4B90129853A85F1 |
:10600000220D331D260F371F37FF03C040E050E03D |
:1060100008C080919305482F5527241735070CF4A5 |
:10602000A90180917705C82EDD24C601C416D506C6 |
:106030000CF4CA0180936F059101261B370B69850B |
:106040007A85260F371F37FF03C080E090E007C036 |
:10605000809193059927281739070CF4C9019601F7 |
:10606000C816D9060CF49C012093740560916D0547 |
:1060700070916E0520915302309154024091B50207 |
:106080005091B602241B350B621B730B882777FDDA |
:106090008095982F0E94B0339B01AC0169817A8171 |
:1060A0008B819C810E942A340E94933370936C05EB |
:1060B00060936B0580916B0590916C058C01222794 |
:1060C00017FD2095322F8091A3029091A402A091F8 |
:1060D000A502B091A602080F191F2A1F3B1F0093AB |
:1060E000A3021093A4022093A5023093A6021016D7 |
:1060F000110612061306ACF4C80117FF03C09095F1 |
:1061000081959F4F60E071E00E94B1346F5F7F4FD7 |
:10611000882777FD8095982F061B170B280B390BC6 |
:1061200014C0C80117FF03C0909581959F4F60E090 |
:1061300071E00E94B1346F5F7F4F882777FD8095B3 |
:10614000982F060F171F281F391F0093A3021093C3 |
:10615000A4022093A5023093A6028091A3029091FD |
:10616000A402A091A502B091A60281387EE3970710 |
:1061700070E0A70770E0B7072CF080E89EE3A0E08E |
:10618000B0E009C08058914CAF4FBF4F64F480E835 |
:1061900091ECAFEFBFEF8093A3029093A402A09382 |
:1061A000A502B093A60260916B0570916C058827DB |
:1061B00077FD8095982F0E94B0337B018C01609110 |
:1061C000A3027091A4028091A5029091A6020E9460 |
:1061D000B0339B01AC01C301B2010E942A349B0180 |
:1061E000AC01C801B7010E940B330E9493339501A3 |
:1061F0006A157B050CF49B01B401821693060CF41E |
:10620000B9019101260F371F49855A85241B350B8B |
:1062100037FF03C040E050E008C080919305482F4D |
:106220005527241735070CF4A9019601C416D50685 |
:106230000CF49A0120938E05261A370AB10189853C |
:106240009A85681B790B77FF03C020E030E008C017 |
:1062500080919305282F3327621773070CF49B0155 |
:10626000C601C216D30654F4C90108C08091600269 |
:10627000882311F40C94BC240C94B52480938C05D1 |
:10628000E2E1C65F0C941D3581E080932A0552E05F |
:1062900050932B0543E040932C0584E080932D051B |
:1062A00065E060932E0586E080932F0587E080935C |
:1062B000300538E03093310581EC809332058EE172 |
:1062C0008093330524E6209335058AE080933605D4 |
:1062D00092E390933405909338055093370540939B |
:1062E000390510923A0530933B058FE080933C05C9 |
:1062F0008AEF80933D058AE180933E0580E8809394 |
:106300003F0588EC809340058FEA809341058EE538 |
:106310008093420583E28093430584E180934405A2 |
:1063200010924505109246051092470510924805B7 |
:106330001092490510924A0520934B0588E28093FC |
:106340004C0510925A0590934D0586E980934E05B1 |
:1063500060934F05909350058AE580935105909383 |
:106360005205109259052093530580E580935405FA |
:10637000209355052093560580E180935705AFE59E |
:10638000B5E0EBE6F1E08CE001900D928150E1F791 |
:10639000089581E080932A0532E030932B0583E055 |
:1063A00080932C0594E090932D0545E040932E05B5 |
:1063B00086E080932F0587E08093300588E0809306 |
:1063C000310580E4809332058EE1809333058BEFB5 |
:1063D000809335058AE08093360522E320933405C7 |
:1063E00020933805309337059093390510923A057C |
:1063F00080933B058FE080933C058AEF80933D05B9 |
:106400008AE180933E0580E880933F058FEA809380 |
:106410004005809341058EE58093420583E2809399 |
:10642000430584E18093440510924505109246058A |
:1064300010924705109248051092490510924A059E |
:1064400094E690934B0588E280934C0510925A0590 |
:1064500020934D0586E980934E0540934F05209388 |
:1064600050058AE5809351052093520510925905F5 |
:106470009093530580E58093540590935505909330 |
:10648000560580E180935705AFE5B5E0E5E7F1E01B |
:106490008CE001900D928150E1F7089581E08093A6 |
:1064A0002A0582E080932B0583E080932C0594E0FD |
:1064B00090932D0555E050932E0586E080932F058F |
:1064C00087E08093300538E03093310580E4809395 |
:1064D00032058EE1809333058BEF809335054AE0DA |
:1064E0004093360522E3209334052093380590939A |
:1064F00037059093390530933A058EE080933B053C |
:106500008FE080933C058AEF80933D058AE180937C |
:106510003E0580E880933F0588E78093400536E993 |
:10652000309341058EE58093420583E280934305D5 |
:1065300084E180934405109245051092460510921F |
:106540004705109248051092490510924A0594E6B5 |
:1065500090934B0588E280934C0510925A05209346 |
:106560004D0530934E0550934F05209350058AE515 |
:10657000809351052093520510925905909353052D |
:1065800086E4809354059093550590935605409367 |
:106590005705AFE5B5E0EDE7F1E08CE001900D9235 |
:1065A0008150E1F708958091B7029091B802A091CF |
:1065B000B902B091BA028093BF029093C002A09337 |
:1065C000C102B093C2028091BB029091BC02A09123 |
:1065D000BD02B091BE028093C3029093C402A09307 |
:1065E000C502B093C60208951092B4021092B3028D |
:1065F0001092B6021092B5020895FC01415050402D |
:1066000030F001900616D1F73197CF010895882711 |
:10661000992708955058192EEFD001D0D2C0BA173B |
:106620006207730784079507B1F188F40EF410949C |
:106630000B2EBA2FA02D062E622F202D072E732F82 |
:10664000302D082E842F402D092E952F502DFF27F9 |
:106650005523B9F0591B49F0573E98F046953795A8 |
:106660002795A795F0405395C9F776F0BA0F621FAA |
:10667000731F841F30F4879577956795B795F04021 |
:10668000939517FA0F2E0895BF1BBB27BA0B620B09 |
:10669000730B840BF6CFDEF6DBC0AED001D091C019 |
:1066A000552359F0992369F09F575F57951B33F491 |
:1066B00042F4903811F4915805C09BC091589F3F07 |
:1066C00009F4C6C0BB27112462177307840730F48E |
:1066D000660F771F881FBB1F915098F311D00F9240 |
:1066E0000FD00F920DD0A0E82617370748071B06DA |
:1066F00009F0A048BA2F602D7F918F910024089552 |
:10670000A0E80024621773078407B10528F0621B14 |
:10671000730B840BB1090A2A660F771F881FBB1FF2 |
:10672000A69581F7089597FB73D09F3738F0FEE95F |
:10673000F91B982F872F762F6B2F05C086C0969553 |
:10674000879577956795F150D0F73EF490958095B1 |
:10675000709561957F4F8F4F9F4F0895E89403C0C8 |
:1067600097FB0EF4F3DFB62F672F782F892F9EE962 |
:10677000002427C00ED05EF004C00BD026F001C06C |
:1067800008D019F020F48FEF089580E0089581E09B |
:10679000089597FB092E052600F8689430D0E894F8 |
:1067A00007FC07C0621773078407950721F008F4F8 |
:1067B00000940794989408959A95BB0F661F771FCD |
:1067C000881F11249923A1F08823B2F79F3F59F025 |
:1067D000BB0F48F421F4002011F460FF04C06F5F88 |
:1067E0007F4F8F4F9F4F881F9795879597F90895F3 |
:1067F0002CC09FEF80EC0895052E092607FA440F60 |
:10680000551F5F3F79F0AA27A51708F051E047957B |
:10681000880F991F9F3F31F0BB27B91708F091E00F |
:10682000879508959F919F911124E3CF97FB880F3F |
:10683000991F9F3F31F0BB27B91708F091E087956A |
:1068400008959F919F911124D4CF66277727882799 |
:1068500099270895D1DF01D0B4CF992339F055237A |
:1068600029F09F575F57950F13F49AF1F1CF915884 |
:106870009F3FE1F3629FA12D0F92BB27639FA00D65 |
:10688000B11DEE27729FA00DB11DEE1FAF93AA2779 |
:10689000649FB00DE11D739FB00DE11DAA1F662717 |
:1068A000829FB00DE11DA61F5527749FE00DA11D0D |
:1068B000551F839FE00DA11D561F849FA00D511DE4 |
:1068C000852F7A2F6E2F1F900F9088231AF493959F |
:1068D00039F48FCF000C111CBB1F661F771F881F58 |
:1068E00001280895629FD001739FF001829FE00DFF |
:1068F000F11D649FE00DF11D929FF00D839FF00D3F |
:10690000749FF00D659FF00D9927729FB00DE11DEA |
:10691000F91F639FB00DE11DF91FBD01CF011124C7 |
:106920000895991B79E004C0991F961708F0961BEB |
:10693000881F7A95C9F780950895AA1BBB1B51E162 |
:1069400007C0AA1FBB1FA617B70710F0A61BB70BDF |
:10695000881F991F5A95A9F780959095BC01CD0184 |
:10696000089597FB092E07260AD077FD04D0E5DFAE |
:1069700006D000201AF4709561957F4F0895F6F7C0 |
:10698000909581959F4F0895A1E21A2EAA1BBB1BDB |
:10699000FD010DC0AA1FBB1FEE1FFF1FA217B307EB |
:1069A000E407F50720F0A21BB30BE40BF50B661F01 |
:1069B000771F881F991F1A9469F7609570958095C5 |
:1069C00090959B01AC01BD01CF01089597FB092E65 |
:1069D00005260ED057FD04D0D7DF0AD0001C38F4AE |
:1069E00050954095309521953F4F4F4F5F4F0895FB |
:1069F000F6F790958095709561957F4F8F4F9F4FDB |
:106A000008952F923F924F925F926F927F928F9252 |
:106A10009F92AF92BF92CF92DF92EF92FF920F932D |
:106A20001F93CF93DF93CDB7DEB7CA1BDB0B0FB637 |
:106A3000F894DEBF0FBECDBF09942A8839884888F4 |
:106A40005F846E847D848C849B84AA84B984C8848A |
:106A5000DF80EE80FD800C811B81AA81B981CE0F81 |
:106A6000D11D0FB6F894DEBF0FBECDBFED01089566 |
:106A7000EE0FFF1F0590F491E02D0994F999FECFD8 |
:106A8000B2BDA1BDF89A119600B40895F999FECF50 |
:106A9000B2BDA1BD00BC11960FB6F894FA9AF99A4E |
:066AA0000FBE0895FFCFB8 |
:106AA6000A0164FFFF0A016400007D0000FF030184 |
:106AB60002030405060708090A48616C6C6F205733 |
:106AC600656C74000000000000000000000000007B |
:106AD60000000000000000000000000000000000B0 |
:106AE60000000000000000000000000000000000A0 |
:106AF6000000000000000000000000000000000090 |
:106B06000000000000000000000A01426567696E8F |
:106B16006E657200004B616D657261000053706FA7 |
:106B260072740000640090D0030090D0030000004F |
:106B3600803F17B7D13830FB103A409696020A6468 |
:026B4600460007 |
:00000001FF |
/branches/v0.60_MicroMag3_Nick666/trunc/FlightCtrl.aps |
---|
0,0 → 1,0 |
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>11-Oct-2007 22:58:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\MikroKopter\FlightCtrl\branches\V0.64_ZeroWarnings\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>uart.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>timer0.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>fc.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>fc.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>TWIMASTER.C</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>uart.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>analog.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>gps.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>main.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>rc.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>Settings.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>timer0.h</FileName><Status>1</Status></File00018></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio> |
/branches/v0.60_MicroMag3_Nick666/trunc/GPS.c |
---|
0,0 → 1,30 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
signed int GPS_Nick = 0; |
signed int GPS_Roll = 0; |
long GpsAktuell_X = 0; |
long GpsAktuell_Y = 0; |
long GpsZiel_X = 0; |
long GpsZiel_Y = 0; |
void GPS_Neutral(void) |
{ |
GpsZiel_X = GpsAktuell_X; |
GpsZiel_Y = GpsAktuell_Y; |
} |
void GPS_BerechneZielrichtung(void) |
{ |
GPS_Nick = 0; |
GPS_Roll = 0; |
} |
/branches/v0.60_MicroMag3_Nick666/trunc/Settings.h |
---|
--- v0.60_MicroMag3_Nick666/trunc/_Settings.h (nonexistent) |
+++ v0.60_MicroMag3_Nick666/trunc/_Settings.h (revision 436) |
@@ -0,0 +1,50 @@ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Testmodi |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define MOTOR_OFF 0 |
+#define MOTOR_TEST 0 |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Abstimmung |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define ACC_AMPLIFY 12 |
+#define FAKTOR_P 1 |
+#define FAKTOR_I 0.0001 |
+ |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Debug-Interface |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein? |
+#define MIN_DEBUG_INTERVALL 500 // in diesem Intervall werden Degugdaten ohne Aufforderung gesendet |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Sender |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ #define K_NICK 0 |
+ #define K_ROLL 1 |
+ #define K_GAS 2 |
+ #define K_GIER 3 |
+ #define K_POTI1 4 |
+ #define K_POTI2 5 |
+ #define K_POTI3 6 |
+ #define K_POTI4 7 |
+// +++++++++++++++++++++++++++++++ |
+// + Getestete Settings: |
+// +++++++++++++++++++++++++++++++ |
+// Setting: Kamera |
+// Stick_P:3 |
+// Stick_D:0 |
+// Gyro_P: 175 |
+// Gyro_I: 175 |
+// Ki_Anteil: 10 |
+// +++++++++++++++++++++++++++++++ |
+// + Getestete Settings: |
+// +++++++++++++++++++++++++++++++ |
+// Setting: Normal |
+// Stick_P:2 |
+// Stick_D:8 |
+// Gyro_P: 80 |
+// Gyro_I: 150 |
+// Ki_Anteil: 5 |
+ |
/branches/v0.60_MicroMag3_Nick666/trunc/analog.c |
---|
0,0 → 1,145 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100; |
volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0; |
volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0; |
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0; |
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0; |
volatile long Luftdruck = 32000; |
volatile int StartLuftdruck; |
volatile unsigned int MessLuftdruck = 1023; |
unsigned char DruckOffsetSetting; |
volatile int HoeheD = 0; |
volatile char messanzahl_Druck; |
volatile int tmpLuftdruck; |
volatile unsigned int ZaehlMessungen = 0; |
//####################################################################################### |
// |
void ADC_Init(void) |
//####################################################################################### |
{ |
ADMUX = 0;//Referenz ist extern |
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE); |
//Free Running Mode, Division Factor 128, Interrupt on |
} |
void SucheLuftruckOffset(void) |
{ |
unsigned int off; |
off = eeprom_read_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET]); |
if(off > 20) off -= 10; |
OCR0A = off; |
Delay_ms_Mess(100); |
if(MessLuftdruck < 850) off = 0; |
for(; off < 250;off++) |
{ |
OCR0A = off; |
Delay_ms_Mess(50); |
printf("."); |
if(MessLuftdruck < 900) break; |
} |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off); |
DruckOffsetSetting = off; |
Delay_ms_Mess(300); |
} |
//####################################################################################### |
// |
SIGNAL(SIG_ADC) |
//####################################################################################### |
{ |
static unsigned char kanal=0,state = 0; |
static unsigned int gier1, roll1, nick1; |
ANALOG_OFF; |
switch(state++) |
{ |
case 0: |
gier1 = ADC; |
kanal = 1; |
ZaehlMessungen++; |
break; |
case 1: |
roll1 = ADC; |
kanal = 2; |
break; |
case 2: |
nick1 = ADC; |
kanal = 4; |
break; |
case 3: |
UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2; |
kanal = 6; |
break; |
case 4: |
Aktuell_ay = NeutralAccY - ADC; |
AdWertAccRoll = Aktuell_ay; |
kanal = 7; |
break; |
case 5: |
Aktuell_ax = ADC - NeutralAccX; |
AdWertAccNick = Aktuell_ax; |
kanal = 0; |
break; |
case 6: |
if(PlatinenVersion == 10) AdWertGier = (ADC + gier1) / 2; |
else AdWertGier = ADC + gier1; |
kanal = 1; |
break; |
case 7: |
if(PlatinenVersion == 10) AdWertRoll = (ADC + roll1) / 2; |
else AdWertRoll = ADC + roll1; |
kanal = 2; |
break; |
case 8: |
if(PlatinenVersion == 10) AdWertNick = (ADC + nick1) / 2; |
else AdWertNick = ADC + nick1; |
kanal = 5; |
break; |
case 9: |
AdWertAccHoch = (signed int) ADC - NeutralAccZ; |
AdWertAccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4; |
if(AdWertAccHoch > 1) |
{ |
if(NeutralAccZ < 800) NeutralAccZ+= 0.02; |
} |
else if(AdWertAccHoch < -1) |
{ |
if(NeutralAccZ > 600) NeutralAccZ-= 0.02; |
} |
messanzahl_AccHoch = 1; |
Aktuell_az = ADC; |
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
kanal = 3; |
break; |
case 10: |
tmpLuftdruck += ADC; |
if(++messanzahl_Druck >= 5) |
{ |
MessLuftdruck = ADC; |
messanzahl_Druck = 0; |
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert |
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4; |
HoehenWert = StartLuftdruck - Luftdruck; |
tmpLuftdruck = 0; |
} |
kanal = 0; |
state = 0; |
break; |
default: |
kanal = 0; |
state = 0; |
break; |
} |
ADMUX = kanal; |
if(state != 0) ANALOG_ON; |
} |
/branches/v0.60_MicroMag3_Nick666/trunc/analog.h |
---|
0,0 → 1,24 |
/*####################################################################################### |
#######################################################################################*/ |
extern volatile int UBat; |
extern volatile int AdWertNick, AdWertRoll, AdWertGier; |
extern volatile int AdWertAccRoll,AdWertAccNick,AdWertAccHoch; |
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az; |
extern volatile long Luftdruck; |
extern volatile char messanzahl_Druck; |
extern volatile unsigned int ZaehlMessungen; |
extern unsigned char DruckOffsetSetting; |
extern volatile int HoeheD; |
extern volatile unsigned int MessLuftdruck; |
extern volatile int StartLuftdruck; |
extern volatile char MessanzahlNick; |
unsigned int ReadADC(unsigned char adc_input); |
void ADC_Init(void); |
void SucheLuftruckOffset(void); |
#define ANALOG_OFF ADCSRA=0 |
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE) |
/branches/v0.60_MicroMag3_Nick666/trunc/eeprom.c |
---|
0,0 → 1,165 |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Konstanten |
// + 0-250 -> normale Werte |
// + 251 -> Poti1 |
// + 252 -> Poti2 |
// + 253 -> Poti3 |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
void DefaultKonstanten1(void) |
{ |
EE_Parameter.Kanalbelegung[K_NICK] = 1; |
EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
EE_Parameter.Kanalbelegung[K_GAS] = 3; |
EE_Parameter.Kanalbelegung[K_GIER] = 4; |
EE_Parameter.Kanalbelegung[K_POTI1] = 5; |
EE_Parameter.Kanalbelegung[K_POTI2] = 6; |
EE_Parameter.Kanalbelegung[K_POTI3] = 7; |
EE_Parameter.Kanalbelegung[K_POTI4] = 8; |
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01; |
EE_Parameter.Hoehe_MinGas = 30; |
EE_Parameter.MaxHoehe = 251; // Wert : 0-250 251 -> Poti1 |
EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 50; // Wert : 0-250 |
EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250 |
EE_Parameter.Hoehe_Verstaerkung = 4; // Wert : 0-50 |
EE_Parameter.Stick_P = 4; //2 // Wert : 1-6 |
EE_Parameter.Stick_D = 8; //8 // Wert : 0-64 |
EE_Parameter.Gier_P = 14; // Wert : 1-20 |
EE_Parameter.Gas_Min = 15; // Wert : 0-32 |
EE_Parameter.Gas_Max = 250; // Wert : 33-250 |
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64 |
EE_Parameter.KompassWirkung = 128; // Wert : 0-250 |
EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250 |
EE_Parameter.Gyro_I = 150; // Wert : 0-250 |
EE_Parameter.UnterspannungsWarnung = 94; // Wert : 0-250 |
EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust |
EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
EE_Parameter.UfoAusrichtung = 0; // X oder + Formation |
EE_Parameter.I_Faktor = 0; |
EE_Parameter.UserParam1 = 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; |
EE_Parameter.LoopGasLimit = 50; |
EE_Parameter.LoopThreshold = 90; // Wert: 0-250 Schwelle für Stickausschlag |
EE_Parameter.LoopHysterese = 50; |
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
EE_Parameter.AchsKopplung1 = 100; |
EE_Parameter.AchsGegenKopplung1 = 70; |
EE_Parameter.WinkelUmschlagNick = 100; |
EE_Parameter.WinkelUmschlagRoll = 100; |
EE_Parameter.GyroAccAbgleich = 10; // 1/k |
memcpy(EE_Parameter.Name, "Sport\0", 12); |
} |
void DefaultKonstanten2(void) |
{ |
EE_Parameter.Kanalbelegung[K_NICK] = 1; |
EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
EE_Parameter.Kanalbelegung[K_GAS] = 3; |
EE_Parameter.Kanalbelegung[K_GIER] = 4; |
EE_Parameter.Kanalbelegung[K_POTI1] = 5; |
EE_Parameter.Kanalbelegung[K_POTI2] = 6; |
EE_Parameter.Kanalbelegung[K_POTI3] = 7; |
EE_Parameter.Kanalbelegung[K_POTI4] = 8; |
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01; |
EE_Parameter.Hoehe_MinGas = 30; |
EE_Parameter.MaxHoehe = 251; // Wert : 0-250 251 -> Poti1 |
EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 50; // Wert : 0-250 |
EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250 |
EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50 |
EE_Parameter.Stick_P = 4; //2 // Wert : 1-6 |
EE_Parameter.Stick_D = 0; //8 // Wert : 0-64 |
EE_Parameter.Gier_P = 10; // Wert : 1-20 |
EE_Parameter.Gas_Min = 15; // Wert : 0-32 |
EE_Parameter.Gas_Max = 250; // Wert : 33-250 |
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64 |
EE_Parameter.KompassWirkung = 128; // Wert : 0-250 |
EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250 |
EE_Parameter.Gyro_I = 175; // Wert : 0-250 |
EE_Parameter.UnterspannungsWarnung = 94; // Wert : 0-250 |
EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust |
EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
EE_Parameter.UfoAusrichtung = 0; // X oder + Formation |
EE_Parameter.I_Faktor = 0; |
EE_Parameter.UserParam1 = 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; |
EE_Parameter.LoopGasLimit = 50; |
EE_Parameter.LoopThreshold = 90; // Wert: 0-250 Schwelle für Stickausschlag |
EE_Parameter.LoopHysterese = 50; |
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts |
EE_Parameter.AchsKopplung1 = 100; // Faktor, mit dem Gier die Achsen Roll und Nick verkoppelt |
EE_Parameter.AchsGegenKopplung1 = 80; |
EE_Parameter.WinkelUmschlagNick = 100; |
EE_Parameter.WinkelUmschlagRoll = 100; |
EE_Parameter.GyroAccAbgleich = 16; // 1/k |
memcpy(EE_Parameter.Name, "Kamera\0", 12); |
} |
void DefaultKonstanten3(void) |
{ |
EE_Parameter.Kanalbelegung[K_NICK] = 1; |
EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
EE_Parameter.Kanalbelegung[K_GAS] = 3; |
EE_Parameter.Kanalbelegung[K_GIER] = 4; |
EE_Parameter.Kanalbelegung[K_POTI1] = 5; |
EE_Parameter.Kanalbelegung[K_POTI2] = 6; |
EE_Parameter.Kanalbelegung[K_POTI3] = 7; |
EE_Parameter.Kanalbelegung[K_POTI4] = 8; |
EE_Parameter.GlobalConfig = CFG_HOEHENREGELUNG | CFG_DREHRATEN_BEGRENZER | CFG_ACHSENKOPPLUNG_AKTIV;///*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01; |
EE_Parameter.Hoehe_MinGas = 30; |
EE_Parameter.MaxHoehe = 100; // Wert : 0-250 251 -> Poti1 |
EE_Parameter.Hoehe_P = 10; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 50; // Wert : 0-250 |
EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250 |
EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50 |
EE_Parameter.Stick_P = 3; //2 // Wert : 1-6 |
EE_Parameter.Stick_D = 0; //8 // Wert : 0-64 |
EE_Parameter.Gier_P = 8; // Wert : 1-20 |
EE_Parameter.Gas_Min = 15; // Wert : 0-32 |
EE_Parameter.Gas_Max = 250; // Wert : 33-250 |
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64 |
EE_Parameter.KompassWirkung = 128; // Wert : 0-250 |
EE_Parameter.Gyro_P = 200; //80 // Wert : 0-250 |
EE_Parameter.Gyro_I = 175; // Wert : 0-250 |
EE_Parameter.UnterspannungsWarnung = 94; // Wert : 0-250 |
EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust |
EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
EE_Parameter.UfoAusrichtung = 0; // X oder + Formation |
EE_Parameter.I_Faktor = 0; |
EE_Parameter.UserParam1 = 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; |
EE_Parameter.LoopGasLimit = 50; |
EE_Parameter.LoopThreshold = 90; // Wert: 0-250 Schwelle für Stickausschlag |
EE_Parameter.LoopHysterese = 50; |
EE_Parameter.LoopConfig = 0; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts |
EE_Parameter.AchsKopplung1 = 100; // Faktor, mit dem Gier die Achsen Roll und Nick verkoppelt |
EE_Parameter.AchsGegenKopplung1 = 80; |
EE_Parameter.WinkelUmschlagNick = 100; |
EE_Parameter.WinkelUmschlagRoll = 100; |
EE_Parameter.GyroAccAbgleich = 16; // 1/k |
memcpy(EE_Parameter.Name, "Beginner\0", 12); |
} |
/branches/v0.60_MicroMag3_Nick666/trunc/eeprom.h |
---|
--- v0.60_MicroMag3_Nick666/trunc/fc.c (nonexistent) |
+++ v0.60_MicroMag3_Nick666/trunc/fc.c (revision 436) |
@@ -0,0 +1,1032 @@ |
+/*####################################################################################### |
+Flight Control |
+#######################################################################################*/ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Copyright (c) 04.2007 Holger Buss |
+// + Nur für den privaten Gebrauch |
+// + www.MikroKopter.com |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
+// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist. |
+// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
+// + bzgl. der Nutzungsbedingungen aufzunehmen. |
+// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
+// + Verkauf von Luftbildaufnahmen, usw. |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
+// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
+// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
+// + eindeutig als Ursprung verlinkt werden |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
+// + Benutzung auf eigene Gefahr |
+// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
+// + mit unserer Zustimmung zulässig |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
+// + this list of conditions and the following disclaimer. |
+// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
+// + from this software without specific prior written permission. |
+// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
+// + for non-commercial use (directly or indirectly) |
+// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
+// + with our written permission |
+// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
+// + clearly linked as origin |
+// + * porting to systems other than hardware from www.mikrokopter.de is not allowed |
+// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
+// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
+// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
+// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
+// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
+// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
+// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
+// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
+// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
+// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
+// + POSSIBILITY OF SUCH DAMAGE. |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+#include "main.h" |
+#include "eeprom.c" |
+ |
+unsigned char h,m,s; |
+volatile unsigned int I2CTimeout = 100; |
+volatile int MesswertNick,MesswertRoll,MesswertGier; |
+volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
+volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0; |
+volatile float NeutralAccZ = 0; |
+unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0; |
+volatile long IntegralNick = 0,IntegralNick2 = 0; |
+volatile long IntegralRoll = 0,IntegralRoll2 = 0; |
+volatile long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
+volatile long Integral_Gier = 0; |
+volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
+volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
+volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
+volatile long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2; |
+volatile long Mess_Integral_Hoch = 0; |
+volatile int KompassValue = 0; |
+volatile int KompassStartwert = 0; |
+volatile int KompassRichtung = 0; |
+unsigned char MAX_GAS,MIN_GAS; |
+unsigned char Notlandung = 0; |
+unsigned char HoehenReglerAktiv = 0; |
+long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L; |
+ |
+float GyroFaktor; |
+float IntegralFaktor; |
+ |
+volatile int DiffNick,DiffRoll; |
+int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0; |
+volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
+unsigned char MotorWert[5]; |
+volatile unsigned char SenderOkay = 0; |
+int StickNick = 0,StickRoll = 0,StickGier = 0; |
+char MotorenEin = 0; |
+int HoehenWert = 0; |
+int SollHoehe = 0; |
+int I_LageRoll = 0,I_LageNick = 0; |
+float Kp = FAKTOR_P; |
+float Ki = FAKTOR_I; |
+unsigned char Looping_Nick = 0,Looping_Roll = 0; |
+unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
+ |
+unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
+unsigned char Parameter_MaxHoehe = 251; // Wert : 0-250 |
+unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32 |
+unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250 |
+unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250 |
+unsigned char Parameter_Gyro_P = 150; // Wert : 10-250 |
+unsigned char Parameter_Gyro_I = 150; // Wert : 0-250 |
+unsigned char Parameter_Gier_P = 2; // Wert : 1-20 |
+unsigned char Parameter_I_Faktor = 10; // Wert : 1-20 |
+unsigned char Parameter_UserParam1 = 0; |
+unsigned char Parameter_UserParam2 = 0; |
+unsigned char Parameter_UserParam3 = 0; |
+unsigned char Parameter_UserParam4 = 0; |
+unsigned char Parameter_ServoNickControl = 100; |
+unsigned char Parameter_LoopGasLimit = 70; |
+unsigned char Parameter_AchsKopplung1 = 0; |
+unsigned char Parameter_AchsGegenKopplung1 = 0; |
+struct mk_param_struct EE_Parameter; |
+ |
+void Piep(unsigned char Anzahl) |
+{ |
+ while(Anzahl--) |
+ { |
+ if(MotorenEin) return; //auf keinen Fall im Flug! |
+ beeptime = 100; |
+ Delay_ms(250); |
+ } |
+} |
+ |
+//############################################################################ |
+// Nullwerte ermitteln |
+void SetNeutral(void) |
+//############################################################################ |
+{ |
+ NeutralAccX = 0; |
+ NeutralAccY = 0; |
+ NeutralAccZ = 0; |
+ AdNeutralNick = 0; |
+ AdNeutralRoll = 0; |
+ AdNeutralGier = 0; |
+ Parameter_AchsKopplung1 = 0; |
+ Parameter_AchsGegenKopplung1 = 0; |
+ CalibrierMittelwert(); |
+ Delay_ms_Mess(100); |
+ CalibrierMittelwert(); |
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
+ { |
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
+ } |
+ |
+ AdNeutralNick= AdWertNick; |
+ AdNeutralRoll= AdWertRoll; |
+ AdNeutralGier= AdWertGier; |
+ StartNeutralRoll = AdNeutralRoll; |
+ StartNeutralNick = AdNeutralNick; |
+ NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY; |
+ NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY; |
+ NeutralAccZ = Aktuell_az; |
+ |
+ Mess_IntegralNick = 0; |
+ Mess_IntegralNick2 = 0; |
+ Mess_IntegralRoll = 0; |
+ Mess_IntegralRoll2 = 0; |
+ Mess_Integral_Gier = 0; |
+ MesswertNick = 0; |
+ MesswertRoll = 0; |
+ MesswertGier = 0; |
+ StartLuftdruck = Luftdruck; |
+ HoeheD = 0; |
+ Mess_Integral_Hoch = 0; |
+ KompassStartwert = KompassValue; |
+ GPS_Neutral(); |
+ beeptime = 50; |
+ Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
+ Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
+} |
+ |
+//############################################################################ |
+// Bearbeitet die Messwerte |
+void Mittelwert(void) |
+//############################################################################ |
+{ |
+ static signed long tmpl,tmpl2; |
+ MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
+ MesswertRoll = (signed int) AdWertRoll - AdNeutralRoll; |
+ MesswertNick = (signed int) AdWertNick - AdNeutralNick; |
+ |
+// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
+ Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L; |
+ Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 1 + ((ACC_AMPLIFY * (long)AdWertAccRoll))) / 2L; |
+ Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
+ IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
+ IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
+ IntegralAccZ += Aktuell_az - 704;//NeutralAccZ; |
+// Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
+ Mess_Integral_Gier += MesswertGier; |
+ Mess_Integral_Gier2 += MesswertGier; |
+// Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
+ if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
+ { |
+ tmpl = Mess_IntegralNick / 4096L; |
+ tmpl *= MesswertGier; |
+ tmpl *= Parameter_AchsKopplung1; //125 |
+ tmpl /= 2048L; |
+ tmpl2 = Mess_IntegralRoll / 4096L; |
+ tmpl2 *= MesswertGier; |
+ tmpl2 *= Parameter_AchsKopplung1; |
+ tmpl2 /= 2048L; |
+ } |
+ else tmpl = tmpl2 = 0; |
+// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
+ MesswertRoll += tmpl; |
+ MesswertRoll += (tmpl2*Parameter_AchsGegenKopplung1)/512L; //109 |
+ Mess_IntegralRoll2 += MesswertRoll; |
+ Mess_IntegralRoll += MesswertRoll - I_LageRoll; |
+ if(Mess_IntegralRoll > Umschlag180Roll) |
+ { |
+ Mess_IntegralRoll = -(Umschlag180Roll - 10000L); |
+ Mess_IntegralRoll2 = Mess_IntegralRoll; |
+ } |
+ if(Mess_IntegralRoll <-Umschlag180Roll) |
+ { |
+ Mess_IntegralRoll = (Umschlag180Roll - 10000L); |
+ Mess_IntegralRoll2 = Mess_IntegralRoll; |
+ } |
+ if(AdWertRoll < 15) MesswertRoll = -1000; |
+ if(AdWertRoll < 7) MesswertRoll = -2000; |
+ if(PlatinenVersion == 10) |
+ { |
+ if(AdWertRoll > 1010) MesswertRoll = +1000; |
+ if(AdWertRoll > 1017) MesswertRoll = +2000; |
+ } |
+ else |
+ { |
+ if(AdWertRoll > 2020) MesswertRoll = +1000; |
+ if(AdWertRoll > 2034) MesswertRoll = +2000; |
+ } |
+// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
+ MesswertNick -= tmpl2; |
+ MesswertNick -= (tmpl*Parameter_AchsGegenKopplung1)/512L; |
+ Mess_IntegralNick2 += MesswertNick; |
+ Mess_IntegralNick += MesswertNick - I_LageNick; |
+ if(Mess_IntegralNick > Umschlag180Nick) |
+ { |
+ Mess_IntegralNick = -(Umschlag180Nick - 10000L); |
+ Mess_IntegralNick2 = Mess_IntegralNick; |
+ } |
+ if(Mess_IntegralNick <-Umschlag180Nick) |
+ { |
+ Mess_IntegralNick = (Umschlag180Nick - 10000L); |
+ Mess_IntegralNick2 = Mess_IntegralNick; |
+ } |
+ if(AdWertNick < 15) MesswertNick = -1000; |
+ if(AdWertNick < 7) MesswertNick = -2000; |
+ if(PlatinenVersion == 10) |
+ { |
+ if(AdWertNick > 1010) MesswertNick = +1000; |
+ if(AdWertNick > 1017) MesswertNick = +2000; |
+ } |
+ else |
+ { |
+ if(AdWertNick > 2020) MesswertNick = +1000; |
+ if(AdWertNick > 2034) MesswertNick = +2000; |
+ } |
+//++++++++++++++++++++++++++++++++++++++++++++++++ |
+// ADC einschalten |
+ ANALOG_ON; |
+//++++++++++++++++++++++++++++++++++++++++++++++++ |
+DebugOut.Analog[11] = MesswertRoll; |
+ |
+ Integral_Gier = Mess_Integral_Gier; |
+ IntegralNick = Mess_IntegralNick; |
+ IntegralRoll = Mess_IntegralRoll; |
+ IntegralNick2 = Mess_IntegralNick2; |
+ IntegralRoll2 = Mess_IntegralRoll2; |
+ |
+ if(EE_Parameter.GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll) |
+ { |
+ if(MesswertNick > 200) MesswertNick += 4 * (MesswertNick - 200); |
+ else if(MesswertNick < -200) MesswertNick += 4 * (MesswertNick + 200); |
+ if(MesswertRoll > 200) MesswertRoll += 4 * (MesswertRoll - 200); |
+ else if(MesswertRoll < -200) MesswertRoll += 4 * (MesswertRoll + 200); |
+ } |
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--; |
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--; |
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--; |
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--; |
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255; |
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255; |
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255; |
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255; |
+} |
+ |
+//############################################################################ |
+// Messwerte beim Ermitteln der Nullage |
+void CalibrierMittelwert(void) |
+//############################################################################ |
+{ |
+ // ADC auschalten, damit die Werte sich nicht während der Berechnung ändern |
+ ANALOG_OFF; |
+ MesswertNick = AdWertNick; |
+ MesswertRoll = AdWertRoll; |
+ MesswertGier = AdWertGier; |
+ Mittelwert_AccNick = ACC_AMPLIFY * (long)AdWertAccNick; |
+ Mittelwert_AccRoll = ACC_AMPLIFY * (long)AdWertAccRoll; |
+ Mittelwert_AccHoch = (long)AdWertAccHoch; |
+ // ADC einschalten |
+ ANALOG_ON; |
+ if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--; |
+ if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--; |
+ if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--; |
+ if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--; |
+ if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255; |
+ if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255; |
+ if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255; |
+ if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255; |
+ |
+ Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
+ Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
+} |
+ |
+//############################################################################ |
+// Senden der Motorwerte per I2C-Bus |
+void SendMotorData(void) |
+//############################################################################ |
+{ |
+ if(MOTOR_OFF || !MotorenEin) |
+ { |
+ Motor_Hinten = 0; |
+ Motor_Vorne = 0; |
+ Motor_Rechts = 0; |
+ Motor_Links = 0; |
+ if(MotorTest[0]) Motor_Vorne = MotorTest[0]; |
+ if(MotorTest[1]) Motor_Hinten = MotorTest[1]; |
+ if(MotorTest[2]) Motor_Links = MotorTest[2]; |
+ if(MotorTest[3]) Motor_Rechts = MotorTest[3]; |
+ } |
+ |
+ DebugOut.Analog[12] = Motor_Vorne; |
+ DebugOut.Analog[13] = Motor_Hinten; |
+ DebugOut.Analog[14] = Motor_Links; |
+ DebugOut.Analog[15] = Motor_Rechts; |
+ |
+ //Start I2C Interrupt Mode |
+ twi_state = 0; |
+ motor = 0; |
+ i2c_start(); |
+} |
+ |
+ |
+ |
+//############################################################################ |
+// Trägt ggf. das Poti als Parameter ein |
+void ParameterZuordnung(void) |
+//############################################################################ |
+{ |
+ |
+ #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;} |
+ CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255); |
+ CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100); |
+ CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100); |
+ CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255); |
+ CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255); |
+ CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255); |
+ CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255); |
+ CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255); |
+ CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255); |
+ CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255); |
+ CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255); |
+ CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255); |
+ CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255); |
+ CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit,0,255); |
+ CHK_POTI(Parameter_AchsKopplung1, EE_Parameter.AchsKopplung1,0,255); |
+ CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
+ |
+ Ki = (float) Parameter_I_Faktor * 0.0001; |
+ MAX_GAS = EE_Parameter.Gas_Max; |
+ MIN_GAS = EE_Parameter.Gas_Min; |
+} |
+ |
+ |
+//############################################################################ |
+// |
+void MotorRegler(void) |
+//############################################################################ |
+{ |
+ int motorwert,pd_ergebnis,h,tmp_int; |
+ int GierMischanteil,GasMischanteil; |
+ static long SummeNick=0,SummeRoll=0; |
+ static long sollGier = 0,tmp_long,tmp_long2; |
+ static long IntegralFehlerNick = 0; |
+ static long IntegralFehlerRoll = 0; |
+ static unsigned int RcLostTimer; |
+ static unsigned char delay_neutral = 0; |
+ static unsigned char delay_einschalten = 0,delay_ausschalten = 0; |
+ static unsigned int modell_fliegt = 0; |
+ static int hoehenregler = 0; |
+ static char TimerWerteausgabe = 0; |
+ static char NeueKompassRichtungMerken = 0; |
+ static long ausgleichNick, ausgleichRoll; |
+ |
+ Mittelwert(); |
+ |
+ GRN_ON; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gaswert ermitteln |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
+ if(GasMischanteil < 0) GasMischanteil = 0; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Emfang schlecht |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(SenderOkay < 100) |
+ { |
+ if(!PcZugriff) |
+ { |
+ if(BeepMuster == 0xffff) |
+ { |
+ beeptime = 15000; |
+ BeepMuster = 0x0c00; |
+ } |
+ } |
+ if(RcLostTimer) RcLostTimer--; |
+ else |
+ { |
+ MotorenEin = 0; |
+ Notlandung = 0; |
+ } |
+ ROT_ON; |
+ if(modell_fliegt > 2000) // wahrscheinlich in der Luft --> langsam absenken |
+ { |
+ GasMischanteil = EE_Parameter.NotGas; |
+ Notlandung = 1; |
+ PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0; |
+ PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0; |
+ PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0; |
+ } |
+ else MotorenEin = 0; |
+ } |
+ else |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Emfang gut |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(SenderOkay > 140) |
+ { |
+ Notlandung = 0; |
+ RcLostTimer = EE_Parameter.NotGasZeit * 50; |
+ if(GasMischanteil > 40) |
+ { |
+ if(modell_fliegt < 0xffff) modell_fliegt++; |
+ } |
+ if((modell_fliegt < 200) || (GasMischanteil < 40)) |
+ { |
+ SummeNick = 0; |
+ SummeRoll = 0; |
+ Mess_Integral_Gier = 0; |
+ Mess_Integral_Gier2 = 0; |
+ } |
+ if((GasMischanteil > 200) && MotorenEin == 0) |
+ { |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// auf Nullwerte kalibrieren |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte |
+ { |
+ unsigned char setting = 2; |
+ if(++delay_neutral > 200) // nicht sofort |
+ { |
+ GRN_OFF; |
+ MotorenEin = 0; |
+ delay_neutral = 0; |
+ modell_fliegt = 0; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
+ { |
+ unsigned char setting=1; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4; |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5; |
+ eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken |
+ } |
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
+ { |
+ if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
+ } |
+ ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
+ SetNeutral(); |
+ Piep(GetActiveParamSetNumber()); |
+ } |
+ } |
+ else delay_neutral = 0; |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gas ist unten |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(GasMischanteil < 35) |
+ { |
+ // Starten |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) |
+ { |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Einschalten |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(++delay_einschalten > 200) |
+ { |
+ delay_einschalten = 200; |
+ modell_fliegt = 1; |
+ MotorenEin = 1; |
+ sollGier = 0; |
+ Mess_Integral_Gier = 0; |
+ Mess_Integral_Gier2 = 0; |
+ Mess_IntegralNick = 0; |
+ Mess_IntegralRoll = 0; |
+ Mess_IntegralNick2 = IntegralNick; |
+ Mess_IntegralRoll2 = IntegralRoll; |
+ SummeNick = 0; |
+ SummeRoll = 0; |
+ } |
+ } |
+ else delay_einschalten = 0; |
+ //Auf Neutralwerte setzen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Auschalten |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) |
+ { |
+ if(++delay_ausschalten > 200) // nicht sofort |
+ { |
+ MotorenEin = 0; |
+ delay_ausschalten = 200; |
+ modell_fliegt = 0; |
+ } |
+ } |
+ else delay_ausschalten = 0; |
+ } |
+ } |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// neue Werte von der Funke |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(!NewPpmData-- || Notlandung) |
+ { |
+ ParameterZuordnung(); |
+ StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P; |
+ StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
+ StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P; |
+ StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
+ StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; |
+ GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0; |
+ IntegralFaktor = ((float) Parameter_Gyro_I) / 44000; |
+ |
+ if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; |
+ if(GyroFaktor < 0) GyroFaktor = 0; |
+ if(IntegralFaktor < 0) IntegralFaktor = 0; |
+ // greift in den Stick ein, um ungewolltes überschlagen zu verhindern |
+ if(!(EE_Parameter.LoopConfig & CFG_LOOP_LINKS) && !(EE_Parameter.LoopConfig & CFG_LOOP_RECHTS)) |
+ { |
+ if(IntegralNick > 60000) |
+ { |
+ StickNick -= 8 * EE_Parameter.Stick_P; |
+ if(IntegralNick > 80000) StickNick -= 16 * EE_Parameter.Stick_P; |
+ } |
+ else |
+ if(IntegralNick < -60000) |
+ { |
+ StickNick += 8 * EE_Parameter.Stick_P; |
+ if(IntegralNick > 80000) StickNick -= 16 * EE_Parameter.Stick_P; |
+ } |
+ if(IntegralRoll > 60000) |
+ { |
+ StickRoll -= 8 * EE_Parameter.Stick_P; |
+ if(IntegralRoll > 80000) StickRoll -= 16 * EE_Parameter.Stick_P; |
+ } |
+ else |
+ if(IntegralRoll < -60000) |
+ { |
+ StickRoll += 8 * EE_Parameter.Stick_P; |
+ if(IntegralRoll > 80000) StickRoll -= 16 * EE_Parameter.Stick_P; |
+ } |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Looping? |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_LINKS) Looping_Links = 1; |
+ else |
+ { |
+ { |
+ if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Links = 0; |
+ } |
+ } |
+ if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_RECHTS) Looping_Rechts = 1; |
+ else |
+ { |
+ if(Looping_Rechts) // Hysterese |
+ { |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Rechts = 0; |
+ } |
+ } |
+ |
+ if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_OBEN) Looping_Oben = 1; |
+ else |
+ { |
+ if(Looping_Oben) // Hysterese |
+ { |
+ if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Oben = 0; |
+ } |
+ } |
+ if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.LoopConfig & CFG_LOOP_UNTEN) Looping_Unten = 1; |
+ else |
+ { |
+ if(Looping_Unten) // Hysterese |
+ { |
+ if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Unten = 0; |
+ } |
+ } |
+ |
+ if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0; |
+ if(Looping_Oben || Looping_Unten) {Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0; |
+ } // Ende neue Funken-Werte |
+ |
+ if(Looping_Roll) beeptime = 100; |
+ if(Looping_Roll || Looping_Nick) |
+ { |
+ if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit; |
+ } |
+ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Bei Empfangsausfall im Flug |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(Notlandung) |
+ { |
+ StickGier = 0; |
+ StickNick = 0; |
+ StickRoll = 0; |
+ GyroFaktor = 0.1; |
+ IntegralFaktor = 0.005; |
+ Looping_Roll = 0; |
+ Looping_Nick = 0; |
+ } |
+ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Integrale auf ACC-Signal abgleichen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define ABGLEICH_ANZAHL 256L |
+ |
+ MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
+ MittelIntegralRoll += IntegralRoll; |
+ MittelIntegralNick2 += IntegralNick2; |
+ MittelIntegralRoll2 += IntegralRoll2; |
+ |
+ if(Looping_Nick || Looping_Roll) |
+ { |
+ IntegralAccNick = 0; |
+ IntegralAccRoll = 0; |
+ MittelIntegralNick = 0; |
+ MittelIntegralRoll = 0; |
+ MittelIntegralNick2 = 0; |
+ MittelIntegralRoll2 = 0; |
+ Mess_IntegralNick2 = Mess_IntegralNick; |
+ Mess_IntegralRoll2 = Mess_IntegralRoll; |
+ ZaehlMessungen = 0; |
+ I_LageNick = 0; |
+ I_LageRoll = 0; |
+ } |
+ |
+ if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
+ { |
+ static int cnt = 0; |
+ static char last_n_p,last_n_n,last_r_p,last_r_n; |
+ static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
+ if(!Looping_Nick && !Looping_Roll) |
+ { |
+ MittelIntegralNick /= ABGLEICH_ANZAHL; |
+ MittelIntegralRoll /= ABGLEICH_ANZAHL; |
+ IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
+ IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
+ IntegralAccZ = IntegralAccZ / ABGLEICH_ANZAHL; |
+#define MAX_I 32 |
+// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
+ IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick); |
+ ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich; |
+ if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < 5000) |
+ { |
+ tmp_long = IntegralFehlerNick / 700L; |
+ if(tmp_long > MAX_I) tmp_long = MAX_I; |
+ if(tmp_long <-MAX_I) tmp_long =-MAX_I; |
+ I_LageNick = tmp_long; |
+ } |
+ else |
+ { |
+ I_LageNick /= 2; |
+ } |
+// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
+ IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll); |
+ ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich; |
+ if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < 5000) |
+ { |
+ tmp_long2 = IntegralFehlerRoll / 700L; |
+ if(tmp_long2 > MAX_I) tmp_long2 = MAX_I; |
+ if(tmp_long2 <-MAX_I) tmp_long2 =-MAX_I; |
+ I_LageRoll = tmp_long2; |
+ } |
+ else |
+ { |
+ I_LageRoll /=2; |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ MittelIntegralNick_Alt = MittelIntegralNick; |
+ MittelIntegralRoll_Alt = MittelIntegralRoll; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ Mess_IntegralNick -= ausgleichNick; |
+ Mess_IntegralRoll -= ausgleichRoll; |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gyro-Drift ermitteln |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ MittelIntegralNick2 /= ABGLEICH_ANZAHL; |
+ MittelIntegralRoll2 /= ABGLEICH_ANZAHL; |
+ tmp_long = (long)(MittelIntegralNick2 - (long)IntegralAccNick); |
+ tmp_long2 = (long)(MittelIntegralRoll2 - (long)IntegralAccRoll); |
+ //DebugOut.Analog[25] = MittelIntegralRoll2 / 26; |
+ |
+ IntegralFehlerNick = tmp_long; |
+ IntegralFehlerRoll = tmp_long2; |
+ Mess_IntegralNick2 -= IntegralFehlerNick; |
+ Mess_IntegralRoll2 -= IntegralFehlerRoll; |
+ |
+// IntegralFehlerNick = (IntegralFehlerNick * 1 + tmp_long) / 2; |
+// IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2; |
+ |
+ |
+DebugOut.Analog[30] = I_LageRoll * 10; |
+DebugOut.Analog[17] = IntegralAccNick / 26; |
+DebugOut.Analog[18] = IntegralAccRoll / 26; |
+DebugOut.Analog[19] = IntegralFehlerNick;// / 26; |
+DebugOut.Analog[20] = IntegralFehlerRoll;// / 26; |
+DebugOut.Analog[21] = MittelIntegralNick / 26; |
+DebugOut.Analog[22] = MittelIntegralRoll / 26; |
+DebugOut.Analog[28] = ausgleichNick; |
+DebugOut.Analog[29] = ausgleichRoll; |
+ |
+#define FEHLER_LIMIT (ABGLEICH_ANZAHL/2) |
+#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL*4) |
+ |
+// Nick +++++++++++++++++++++++++++++++++++++++++++++++++ |
+ cnt = 1;// + labs(IntegralFehlerNick) / 4096; |
+ if(IntegralFehlerNick > FEHLER_LIMIT2) |
+ { |
+ if(last_n_p) |
+ { |
+ cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2; |
+ ausgleichNick = IntegralFehlerNick / 8; |
+ if(ausgleichNick > 5000) ausgleichNick = 5000; |
+ Mess_IntegralNick -= ausgleichNick; |
+ } |
+ else last_n_p = 1; |
+ } else last_n_p = 0; |
+ if(IntegralFehlerNick < -FEHLER_LIMIT2) |
+ { |
+ if(last_n_n) |
+ { |
+ cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2; |
+ ausgleichNick = IntegralFehlerNick / 8; |
+ if(ausgleichNick < -5000) ausgleichNick = -5000; |
+ Mess_IntegralNick -= ausgleichNick; |
+ } |
+ else last_n_n = 1; |
+ } else last_n_n = 0; |
+ |
+ if(cnt > 3) cnt = 3; |
+ if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
+ if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
+ |
+// Roll +++++++++++++++++++++++++++++++++++++++++++++++++ |
+ cnt = 1;// + labs(IntegralFehlerRoll) / 4096; |
+ausgleichRoll = 0; |
+ if(IntegralFehlerRoll > FEHLER_LIMIT2) |
+ { |
+ if(last_r_p) |
+ { |
+ cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2; |
+ ausgleichRoll = IntegralFehlerRoll / 4; |
+ if(ausgleichRoll > 5000) ausgleichRoll = 5000; |
+ Mess_IntegralRoll -= ausgleichRoll; |
+ } |
+ else last_r_p = 1; |
+ } else last_r_p = 0; |
+ if(IntegralFehlerRoll < -FEHLER_LIMIT2) |
+ { |
+ if(last_r_n) |
+ { |
+ cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2; |
+ ausgleichRoll = IntegralFehlerRoll / 4; |
+ if(ausgleichRoll < -5000) ausgleichRoll = -5000; |
+ Mess_IntegralRoll -= ausgleichRoll; |
+ } |
+ else last_r_n = 1; |
+ } else last_r_n = 0; |
+ |
+DebugOut.Analog[27] = ausgleichRoll; |
+ if(cnt > 3) cnt = 3; |
+ if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt; |
+ if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt; |
+DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll); |
+ } |
+ IntegralAccNick = 0; |
+ IntegralAccRoll = 0; |
+ IntegralAccZ = 0; |
+ MittelIntegralNick = 0; |
+ MittelIntegralRoll = 0; |
+ MittelIntegralNick2 = 0; |
+ MittelIntegralRoll2 = 0; |
+ ZaehlMessungen = 0; |
+ } |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gieren |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(abs(StickGier) > 20) // war 35 |
+ { |
+ if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1; |
+ } |
+ tmp_int = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx² |
+ tmp_int += (EE_Parameter.Gier_P * StickGier) / 4; |
+ sollGier = tmp_int; |
+ Mess_Integral_Gier -= tmp_int; |
+ if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen |
+ if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Kompass |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)) |
+ { |
+ int w,v; |
+ static int SignalSchlecht = 0; |
+ w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
+ v = abs(IntegralRoll /512); |
+ if(v > w) w = v; // grösste Neigung ermitteln |
+ if(w < 25 && NeueKompassRichtungMerken && !SignalSchlecht) |
+ { |
+ KompassStartwert = KompassValue; |
+ NeueKompassRichtungMerken = 0; |
+ } |
+ w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren |
+ w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln |
+ if(w > 0) |
+ { |
+ if(!SignalSchlecht) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten |
+ if(SignalSchlecht) SignalSchlecht--; |
+ } |
+ else SignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Debugwerte zuordnen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(!TimerWerteausgabe--) |
+ { |
+ TimerWerteausgabe = 24; |
+ DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor; |
+ DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor; |
+ DebugOut.Analog[2] = Mittelwert_AccNick; |
+ DebugOut.Analog[3] = Mittelwert_AccRoll; |
+ DebugOut.Analog[4] = MesswertGier; |
+ DebugOut.Analog[5] = HoehenWert; |
+ DebugOut.Analog[6] =(Mess_Integral_Hoch / 512); |
+ DebugOut.Analog[8] = KompassValue; |
+ DebugOut.Analog[9] = UBat; |
+ DebugOut.Analog[10] = SenderOkay; |
+ DebugOut.Analog[16] = Mittelwert_AccHoch; |
+ |
+/* DebugOut.Analog[16] = motor_rx[0]; |
+ DebugOut.Analog[17] = motor_rx[1]; |
+ DebugOut.Analog[18] = motor_rx[2]; |
+ DebugOut.Analog[19] = motor_rx[3]; |
+ DebugOut.Analog[20] = motor_rx[0] + motor_rx[1] + motor_rx[2] + motor_rx[3]; |
+ DebugOut.Analog[20] /= 14; |
+ DebugOut.Analog[21] = motor_rx[4]; |
+ DebugOut.Analog[22] = motor_rx[5]; |
+ DebugOut.Analog[23] = motor_rx[6]; |
+ DebugOut.Analog[24] = motor_rx[7]; |
+ DebugOut.Analog[25] = motor_rx[4] + motor_rx[5] + motor_rx[6] + motor_rx[7]; |
+*/ |
+// DebugOut.Analog[9] = MesswertNick; |
+// DebugOut.Analog[9] = SollHoehe; |
+// DebugOut.Analog[10] = Mess_Integral_Gier / 128; |
+// DebugOut.Analog[11] = KompassStartwert; |
+// DebugOut.Analog[10] = Parameter_Gyro_I; |
+// DebugOut.Analog[10] = EE_Parameter.Gyro_I; |
+// DebugOut.Analog[9] = KompassRichtung; |
+// DebugOut.Analog[10] = GasMischanteil; |
+// DebugOut.Analog[3] = HoeheD * 32; |
+// DebugOut.Analog[4] = hoehenregler; |
+ } |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ if(Looping_Nick) MesswertNick = MesswertNick * GyroFaktor; |
+ else MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor; |
+ if(Looping_Roll) MesswertRoll = MesswertRoll * GyroFaktor; |
+ else MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor; |
+// MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor; |
+ MesswertGier = MesswertGier * (GyroFaktor) + Integral_Gier * IntegralFaktor/2; |
+ |
+ // Maximalwerte abfangen |
+ #define MAX_SENSOR 2048 |
+ if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR; |
+ if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR; |
+ if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR; |
+ if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR; |
+ if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR; |
+ if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR; |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Höhenregelung |
+// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+//OCR0B = 180 - (Poti1 + 120) / 4; |
+//DruckOffsetSetting = OCR0B; |
+ if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung |
+ { |
+ int tmp_int; |
+ if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
+ { |
+ if(Parameter_MaxHoehe < 50) |
+ { |
+ SollHoehe = HoehenWert - 20; // Parameter_MaxHoehe ist der PPM-Wert des Schalters |
+ HoehenReglerAktiv = 0; |
+ } |
+ else |
+ HoehenReglerAktiv = 1; |
+ } |
+ else |
+ { |
+ SollHoehe = Parameter_MaxHoehe * EE_Parameter.Hoehe_Verstaerkung - 20; |
+ HoehenReglerAktiv = 1; |
+ } |
+ |
+ if(Notlandung) SollHoehe = 0; |
+ h = HoehenWert; |
+ if((h > SollHoehe) && HoehenReglerAktiv) // zu hoch --> drosseln |
+ { h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / 16; // Differenz bestimmen --> P-Anteil |
+ h = GasMischanteil - h; // vom Gas abziehen |
+ h -= (HoeheD * Parameter_Luftdruck_D)/8; // D-Anteil |
+ tmp_int = ((Mess_Integral_Hoch / 512) * (signed long) Parameter_Hoehe_ACC_Wirkung) / 32; |
+ if(tmp_int > 50) tmp_int = 50; |
+ else if(tmp_int < -50) tmp_int = -50; |
+ h -= tmp_int; |
+ hoehenregler = (hoehenregler*15 + h) / 16; |
+ if(hoehenregler < EE_Parameter.Hoehe_MinGas) // nicht unter MIN |
+ { |
+ if(GasMischanteil >= EE_Parameter.Hoehe_MinGas) hoehenregler = EE_Parameter.Hoehe_MinGas; |
+ if(GasMischanteil < EE_Parameter.Hoehe_MinGas) hoehenregler = GasMischanteil; |
+ } |
+ if(hoehenregler > GasMischanteil) hoehenregler = GasMischanteil; // nicht mehr als Gas |
+ GasMischanteil = hoehenregler; |
+ } |
+ } |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Mischer und PI-Regler |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ DebugOut.Analog[7] = GasMischanteil; |
+ |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Gier-Anteil |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+#define MUL_G 1.0 |
+ GierMischanteil = MesswertGier - sollGier; // Regler für Gier |
+//GierMischanteil = 0; |
+ if(GierMischanteil > (MUL_G * GasMischanteil)) GierMischanteil = MUL_G * GasMischanteil; |
+ if(GierMischanteil < -(MUL_G * GasMischanteil)) GierMischanteil = -(MUL_G * GasMischanteil); |
+ if(GierMischanteil > 100) GierMischanteil = 100; |
+ if(GierMischanteil < -100) GierMischanteil = -100; |
+ |
+ if(GasMischanteil < 20) GierMischanteil = 0; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Nick-Achse |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ DiffNick = Kp * (MesswertNick - (StickNick - GPS_Nick)); // Differenz bestimmen |
+ SummeNick += DiffNick; // I-Anteil |
+ if(SummeNick > 0) SummeNick-= (abs(SummeNick)/256 + 1); else SummeNick += abs(SummeNick)/256 + 1; |
+ if(SummeNick > 16000) SummeNick = 16000; |
+ if(SummeNick < -16000) SummeNick = -16000; |
+ pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick |
+ // Motor Vorn |
+#define MUL 2 |
+ if(pd_ergebnis > MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = MUL * (GasMischanteil + abs(GierMischanteil)); |
+ if(pd_ergebnis < -MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = -MUL * (GasMischanteil + abs(GierMischanteil)); |
+ |
+ motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer |
+ if ((motorwert < 0)) motorwert = 0; |
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
+ Motor_Vorne = motorwert; |
+ // Motor Heck |
+ motorwert = GasMischanteil - pd_ergebnis + GierMischanteil; |
+ if ((motorwert < 0)) motorwert = 0; |
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
+ Motor_Hinten = motorwert; |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// Roll-Achse |
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ DiffRoll = Kp * (MesswertRoll - (StickRoll - GPS_Roll)); // Differenz bestimmen |
+ SummeRoll += DiffRoll; // I-Anteil |
+ if(SummeRoll > 0) SummeRoll-= (abs(SummeRoll)/256 + 1); else SummeRoll += abs(SummeRoll)/256 + 1; |
+ if(SummeRoll > 16000) SummeRoll = 16000; |
+ if(SummeRoll < -16000) SummeRoll = -16000; |
+ pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll |
+ if(pd_ergebnis > MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = MUL * (GasMischanteil + abs(GierMischanteil)); |
+ if(pd_ergebnis < -MUL * (GasMischanteil + abs(GierMischanteil))) pd_ergebnis = -MUL * (GasMischanteil + abs(GierMischanteil)); |
+ // Motor Links |
+ motorwert = GasMischanteil + pd_ergebnis - GierMischanteil; |
+ if ((motorwert < 0)) motorwert = 0; |
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
+ Motor_Links = motorwert; |
+ // Motor Rechts |
+ motorwert = GasMischanteil - pd_ergebnis - GierMischanteil; |
+ if ((motorwert < 0)) motorwert = 0; |
+ else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
+ if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
+ Motor_Rechts = motorwert; |
+ // +++++++++++++++++++++++++++++++++++++++++++++++ |
+} |
+ |
/branches/v0.60_MicroMag3_Nick666/trunc/fc.h |
---|
0,0 → 1,137 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
#ifndef _FC_H |
#define _FC_H |
extern volatile unsigned int I2CTimeout; |
extern unsigned char Sekunde,Minute; |
extern volatile long IntegralNick,IntegralNick2; |
extern volatile long IntegralRoll,IntegralRoll2; |
extern volatile long Mess_IntegralNick,Mess_IntegralNick2; |
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2; |
extern volatile long IntegralAccNick,IntegralAccRoll; |
extern volatile long Mess_Integral_Hoch; |
extern volatile long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2; |
extern volatile int KompassValue; |
extern volatile int KompassStartwert; |
extern volatile int KompassRichtung; |
extern int HoehenWert; |
extern int SollHoehe; |
extern volatile int MesswertNick,MesswertRoll,MesswertGier; |
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll; |
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch; |
extern volatile float NeutralAccZ; |
extern long Umschlag180Nick, Umschlag180Roll; |
void MotorRegler(void); |
void SendMotorData(void); |
void CalibrierMittelwert(void); |
void Mittelwert(void); |
void SetNeutral(void); |
void Piep(unsigned char Anzahl); |
extern void DefaultKonstanten(void); |
void DefaultKonstanten1(void); |
void DefaultKonstanten2(void); |
extern unsigned char h,m,s; |
extern volatile unsigned char Timeout ; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern volatile long IntegralNick,IntegralNick2; |
extern volatile long IntegralRoll,IntegralRoll2; |
extern volatile long Integral_Gier; |
extern volatile long Mess_IntegralNick,Mess_IntegralNick2; |
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2; |
extern volatile long Mess_Integral_Gier; |
extern volatile int DiffNick,DiffRoll; |
extern int Poti1, Poti2, Poti3, Poti4; |
extern volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count; |
extern unsigned char MotorWert[5]; |
extern volatile unsigned char SenderOkay; |
extern int StickNick,StickRoll,StickGier; |
extern char MotorenEin; |
extern void DefaultKonstanten1(void); |
extern void DefaultKonstanten2(void); |
#define STRUCT_PARAM_LAENGE 65 |
struct mk_param_struct |
{ |
unsigned char Kanalbelegung[8]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3 |
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv |
unsigned char Hoehe_MinGas; // Wert : 0-100 |
unsigned char Luftdruck_D; // Wert : 0-250 |
unsigned char MaxHoehe; // Wert : 0-32 |
unsigned char Hoehe_P; // Wert : 0-32 |
unsigned char Hoehe_Verstaerkung; // Wert : 0-50 |
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250 |
unsigned char Stick_P; // Wert : 1-6 |
unsigned char Stick_D; // Wert : 0-64 |
unsigned char Gier_P; // Wert : 1-20 |
unsigned char Gas_Min; // Wert : 0-32 |
unsigned char Gas_Max; // Wert : 33-250 |
unsigned char GyroAccFaktor; // Wert : 1-64 |
unsigned char KompassWirkung; // Wert : 0-32 |
unsigned char Gyro_P; // Wert : 10-250 |
unsigned char Gyro_I; // Wert : 0-250 |
unsigned char UnterspannungsWarnung; // Wert : 0-250 |
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust |
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen |
unsigned char UfoAusrichtung; // X oder + Formation |
unsigned char I_Faktor; // Wert : 0-250 |
unsigned char UserParam1; // Wert : 0-250 |
unsigned char UserParam2; // Wert : 0-250 |
unsigned char UserParam3; // Wert : 0-250 |
unsigned char UserParam4; // Wert : 0-250 |
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos |
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo |
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag |
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag |
unsigned char ServoNickRefresh; // |
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping |
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag |
unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag |
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung) |
unsigned char AchsGegenKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick Gegenkoppelt (NickRollGegenkopplung) |
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt |
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt |
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung) |
unsigned char Driftkomp; |
//------------------------------------------------ |
unsigned char LoopConfig; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
unsigned char ServoNickCompInvert; // Wert : 0-250 0 oder 1 // WICHTIG!!! am Ende lassen |
unsigned char Reserved[4]; |
char Name[12]; |
}; |
/* |
unsigned char ServoNickMax; // Wert : 0-250 |
unsigned char ServoNickRefresh; // |
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping |
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag |
//------------------------------------------------ |
unsigned char LoopConfig; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
unsigned char ServoNickCompInvert; // Wert : 0-250 0 oder 1 // WICHTIG!!! am Ende lassen |
unsigned char Reserved[4]; |
char Name[12]; |
*/ |
extern struct mk_param_struct EE_Parameter; |
extern unsigned char Parameter_Luftdruck_D; |
extern unsigned char Parameter_MaxHoehe; |
extern unsigned char Parameter_Hoehe_P; |
extern unsigned char Parameter_Hoehe_ACC_Wirkung; |
extern unsigned char Parameter_KompassWirkung; |
extern unsigned char Parameter_Gyro_P; |
extern unsigned char Parameter_Gyro_I; |
extern unsigned char Parameter_Gier_P; |
extern unsigned char Parameter_ServoNickControl; |
extern unsigned char Parameter_AchsKopplung1; |
extern unsigned char Parameter_AchsGegenKopplung1; |
#endif //_FC_H |
/branches/v0.60_MicroMag3_Nick666/trunc/flight.pnproj |
---|
0,0 → 1,0 |
<Project name="Flight-Ctrl"><File path="uart.h"></File><File path="main.c"></File><File path="main.h"></File><File path="makefile"></File><File path="uart.c"></File><File path="printf_P.h"></File><File path="printf_P.c"></File><File path="timer0.c"></File><File path="timer0.h"></File><File path="old_macros.h"></File><File path="twimaster.c"></File><File path="version.txt"></File><File path="twimaster.h"></File><File path="rc.c"></File><File path="rc.h"></File><File path="fc.h"></File><File path="fc.c"></File><File path="menu.h"></File><File path="menu.c"></File><File path="_Settings.h"></File><File path="analog.c"></File><File path="analog.h"></File><File path="GPS.c"></File><File path="gps.h"></File><File path="license_buss.txt"></File><File path="math.c"></File><File path="math.h"></File><File path="compass.c"></File><File path="compass.h"></File><File path="COPYING"></File><File path="COPYING.LESSER"></File></Project> |
/branches/v0.60_MicroMag3_Nick666/trunc/flight.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd> |
/branches/v0.60_MicroMag3_Nick666/trunc/gps.h |
---|
0,0 → 1,14 |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Nick; |
extern signed int GPS_Roll; |
void GPS_Neutral(void); |
void GPS_BerechneZielrichtung(void); |
/branches/v0.60_MicroMag3_Nick666/trunc/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/trunc/main.c |
---|
0,0 → 1,239 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + Nur für den privaten Gebrauch |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), |
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nicht-kommerziellen Gebrauch zulässig ist. |
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt |
// + bzgl. der Nutzungsbedingungen aufzunehmen. |
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen, |
// + Verkauf von Luftbildaufnahmen, usw. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, |
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts |
// + auf anderen Webseiten oder Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de" |
// + eindeutig als Ursprung verlinkt und genannt werden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion |
// + Benutzung auf eigene Gefahr |
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur |
// + mit unserer Zustimmung zulässig |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Redistributions of source code (with or without modifications) must retain the above copyright notice, |
// + this list of conditions and the following disclaimer. |
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived |
// + from this software without specific prior written permission. |
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet |
// + for non-commercial use (directly or indirectly) |
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted |
// + with our written permission |
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be |
// + clearly linked as origin |
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// + POSSIBILITY OF SUCH DAMAGE. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
// Reservierung im EEPROM |
unsigned char EEPromArray[10] EEMEM; |
struct mk_param_struct EEParameterArray[5] EEMEM; |
unsigned char PlatinenVersion = 10; |
// -- Parametersatz aus EEPROM lesen --- |
// number [0..5] |
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length) |
{ |
if (number > 5) number = 5; |
number--; |
eeprom_read_block(buffer, &EEParameterArray[number], length); |
} |
// -- Parametersatz ins EEPROM schreiben --- |
// number [0..5] |
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length) |
{ |
if(number > 5) number = 5; |
number--; |
eeprom_write_block(buffer, &EEParameterArray[number], length); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number); // diesen Parametersatz als aktuell merken |
} |
unsigned char GetActiveParamSetNumber(void) |
{ |
unsigned char set; |
set = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]); |
if(set > 5) |
{ |
set = 2; |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], set); // diesen Parametersatz als aktuell merken |
} |
return(set); |
} |
//############################################################################ |
//Hauptprogramm |
int main (void) |
//############################################################################ |
{ |
unsigned int timer; |
//unsigned int timer2 = 0; |
DDRB = 0x00; |
PORTB = 0x00; |
for(timer = 0; timer < 1000; timer++); // verzögern |
if(PINB & 0x01) PlatinenVersion = 11; else PlatinenVersion = 10; |
DDRC = 0x81; // SCL |
PORTC = 0xff; // Pullup SDA |
DDRB = 0x1B; // LEDs und Druckoffset |
PORTB = 0x01; // LED_Rot |
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5 |
DDRD |=0x80; // J7 |
PORTD = 0xF7; // LED |
MCUSR &=~(1<<WDRF); |
WDTCSR |= (1<<WDCE)|(1<<WDE); |
WDTCSR = 0; |
beeptime = 2000; |
StickGier = 0; PPM_in[K_GAS] = 0;StickRoll = 0; StickNick = 0; |
ROT_OFF; |
Timer_Init(); |
UART_Init(); |
rc_sum_init(); |
ADC_Init(); |
i2c_init(); |
init_MM3(); |
sei(); |
VersionInfo.Hauptversion = VERSION_HAUPTVERSION; |
VersionInfo.Nebenversion = VERSION_NEBENVERSION; |
VersionInfo.PCKompatibel = VERSION_KOMPATIBEL; |
printf("\n\rFlightControl\n\rHardware:%d.%d\n\rSoftware:V%d.%d%c ",PlatinenVersion/10,PlatinenVersion%10, VERSION_HAUPTVERSION, VERSION_NEBENVERSION,VERSION_INDEX + 'a'); |
printf("\n\r=============================="); |
GRN_ON; |
#define EE_DATENREVISION 66 // wird angepasst, wenn sich die EEPROM-Daten geändert haben |
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != EE_DATENREVISION) |
{ |
printf("\n\rInit. EEPROM: Generiere Default-Parameter..."); |
DefaultKonstanten1(); |
for (unsigned char i=0;i<6;i++) |
{ |
if(i==2) DefaultKonstanten2(); // Kamera |
if(i==3) DefaultKonstanten3(); // Beginner |
if(i>3) DefaultKonstanten2(); // Kamera |
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
} |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 3); // default-Setting |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], EE_DATENREVISION); |
} |
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber()); |
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
printf("\n\rAbgleich Luftdrucksensor.."); |
timer = SetDelay(1000); |
SucheLuftruckOffset(); |
while (!CheckDelay(timer)); |
printf("OK\n\r"); |
} |
SetNeutral(); |
ROT_OFF; |
beeptime = 2000; |
DebugIn.Analog[1] = 1000; |
DebugIn.Digital[0] = 0x55; |
printf("\n\rSteuerung: "); |
if (EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) printf("HeadingHold"); |
else printf("Neutral"); |
printf("\n\n\r"); |
LcdClear(); |
I2CTimeout = 5000; |
while (1) |
{ |
if (UpdateMotor) // ReglerIntervall |
{ |
// SPI_TransmitByte(); |
UpdateMotor=0; |
//PORTD |= 0x08; |
MotorRegler(); |
//PORTD &= ~0x08; |
SendMotorData(); |
ROT_OFF; |
if(PcZugriff) PcZugriff--; |
if(SenderOkay) SenderOkay--; |
if(!I2CTimeout) |
{ |
I2CTimeout = 5; |
i2c_reset(); |
if((BeepMuster == 0xffff) && MotorenEin) |
{ |
beeptime = 10000; |
BeepMuster = 0x0080; |
} |
} |
else |
{ |
I2CTimeout--; |
ROT_OFF; |
} |
} |
if(SIO_DEBUG) |
{ |
DatenUebertragung(); |
BearbeiteRxDaten(); |
} |
else BearbeiteRxDaten(); |
if(CheckDelay(timer)) |
{ |
if(UBat < EE_Parameter.UnterspannungsWarnung) |
{ |
if(BeepMuster == 0xffff) |
{ |
beeptime = 6000; |
BeepMuster = 0x0300; |
} |
} |
// SPI_StartTransmitPacket(); |
timer = SetDelay(100); |
} |
} |
return (1); |
} |
/branches/v0.60_MicroMag3_Nick666/trunc/main.h |
---|
0,0 → 1,96 |
#ifndef _MAIN_H |
#define _MAIN_H |
//Hier die Quarz Frequenz einstellen |
#if defined (__AVR_ATmega32__) |
#define SYSCLK 20000000L //Quarz Frequenz in Hz |
#endif |
#if defined (__AVR_ATmega644__) |
#define SYSCLK 20000000L //Quarz Frequenz in Hz |
//#define SYSCLK 16000000L //Quarz Frequenz in Hz |
#endif |
// neue Hardware |
#define ROT_OFF {if(PlatinenVersion == 10) PORTB &=~0x01; else PORTB |= 0x01;} |
#define ROT_ON {if(PlatinenVersion == 10) PORTB |= 0x01; else PORTB &=~0x01;} |
#define ROT_FLASH PORTB ^= 0x01 |
#define GRN_OFF PORTB &=~0x02 |
#define GRN_ON PORTB |= 0x02 |
#define GRN_FLASH PORTB ^= 0x02 |
#define F_CPU SYSCLK |
//#ifndef F_CPU |
//#error ################## F_CPU nicht definiert oder ungültig ############# |
//#endif |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define EEPROM_ADR_VALID 1 |
#define EEPROM_ADR_ACTIVE_SET 2 |
#define EEPROM_ADR_LAST_OFFSET 3 |
#define CFG_HOEHENREGELUNG 0x01 |
#define CFG_HOEHEN_SCHALTER 0x02 |
#define CFG_HEADING_HOLD 0x04 |
#define CFG_KOMPASS_AKTIV 0x08 |
#define CFG_KOMPASS_FIX 0x10 |
#define CFG_GPS_AKTIV 0x20 |
#define CFG_ACHSENKOPPLUNG_AKTIV 0x40 |
#define CFG_DREHRATEN_BEGRENZER 0x80 |
#define CFG_LOOP_OBEN 0x01 |
#define CFG_LOOP_UNTEN 0x02 |
#define CFG_LOOP_LINKS 0x04 |
#define CFG_LOOP_RECHTS 0x08 |
//#define SYSCLK |
//extern unsigned long SYSCLK; |
extern volatile int i_Nick[20],i_Roll[20],DiffNick,DiffRoll; |
extern volatile unsigned char SenderOkay; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern unsigned char PlatinenVersion; |
void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length); |
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length); |
extern unsigned char GetActiveParamSetNumber(void); |
extern unsigned char EEPromArray[]; |
#include <stdlib.h> |
#include <string.h> |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <avr/interrupt.h> |
#include <avr/eeprom.h> |
#include <avr/boot.h> |
#include <avr/wdt.h> |
#include "old_macros.h" |
#include "_Settings.h" |
#include "printf_P.h" |
#include "timer0.h" |
#include "uart.h" |
#include "analog.h" |
#include "twimaster.h" |
#include "menu.h" |
#include "rc.h" |
#include "fc.h" |
#include "gps.h" |
#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/trunc/makefile |
---|
0,0 → 1,412 |
#-------------------------------------------------------------------- |
# MCU name |
MCU = atmega644 |
F_CPU = 20000000 |
#------------------------------------------------------------------- |
HAUPT_VERSION = 0 |
NEBEN_VERSION = 66 |
VERSION_INDEX = 2 |
VERSION_KOMPATIBEL = 6 # PC-Kompatibilität |
#------------------------------------------------------------------- |
ifeq ($(MCU), atmega32) |
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m |
HEX_NAME = MEGA32 |
endif |
ifeq ($(MCU), atmega644) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
# -u bei neuen Controllern wieder einspielen |
HEX_NAME = MEGA644 |
endif |
ifeq ($(F_CPU), 16000000) |
QUARZ = 16MHZ |
endif |
ifeq ($(F_CPU), 20000000) |
QUARZ = 20MHZ |
endif |
# Output format. (can be srec, ihex, binary) |
FORMAT = ihex |
# Target file name (without extension). |
ifeq ($(VERSION_INDEX), 0) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)a |
endif |
ifeq ($(VERSION_INDEX), 1) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)b |
endif |
ifeq ($(VERSION_INDEX), 2) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)c |
endif |
ifeq ($(VERSION_INDEX), 3) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)d |
endif |
ifeq ($(VERSION_INDEX), 4) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)e |
endif |
ifeq ($(VERSION_INDEX), 5) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)f |
endif |
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. |
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) |
OPT = s |
########################################################################################################## |
# List C source files here. (C dependencies are automatically generated.) |
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c |
SRC += twimaster.c rc.c fc.c GPS.c |
#spi.c |
########################################################################################################## |
# List Assembler source files here. |
# Make them always end in a capital .S. Files ending in a lowercase .s |
# will not be considered source files but generated files (assembler |
# output from the compiler), and will be deleted upon "make clean"! |
# Even though the DOS/Win* filesystem matches both .s and .S the same, |
# it will preserve the spelling of the filenames, and gcc itself does |
# care about how the name is spelled on its command-line. |
ASRC = |
# List any extra directories to look for include files here. |
# Each directory must be seperated by a space. |
EXTRAINCDIRS = |
# Optional compiler flags. |
# -g: generate debugging information (for GDB, or for COFF conversion) |
# -O*: optimization level |
# -f...: tuning, see gcc manual and avr-libc documentation |
# -Wall...: warning level |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create assembler listing |
CFLAGS = -O$(OPT) \ |
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \ |
-Wall -Wstrict-prototypes \ |
-mtiny-stack -mcall-prologues \ |
-Wa,-adhlns=$(<:.c=.lst) \ |
$(patsubst %,-I%,$(EXTRAINCDIRS)) |
# Set a "language standard" compiler flag. |
# Unremark just one line below to set the language standard to use. |
# gnu99 = C99 + GNU extensions. See GCC manual for more information. |
#CFLAGS += -std=c89 |
#CFLAGS += -std=gnu89 |
#CFLAGS += -std=c99 |
CFLAGS += -std=gnu99 |
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL) -DVERSION_INDEX=$(VERSION_INDEX) |
# Optional assembler flags. |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create listing |
# -gstabs: have the assembler create line number information; note that |
# for use in COFF files, additional information about filenames |
# and function names needs to be present in the assembler source |
# files -- see avr-libc docs [FIXME: not yet described there] |
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs |
# Optional linker flags. |
# -Wl,...: tell GCC to pass this to linker. |
# -Map: create map file |
# --cref: add cross reference to map file |
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref |
# Additional libraries |
# Minimalistic printf version |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min |
# Floating point printf version (requires -lm below) |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt |
# -lm = math library |
LDFLAGS += -lm |
##LDFLAGS += -T./linkerfile/avr5.x |
# Programming support using avrdude. Settings and variables. |
# Programming hardware: alf avr910 avrisp bascom bsd |
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 |
# |
# Type: avrdude -c ? |
# to get a full listing. |
# |
#AVRDUDE_PROGRAMMER = stk200 |
AVRDUDE_PROGRAMMER = dt006 |
#AVRDUDE_PROGRAMMER = ponyser |
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden |
#AVRDUDE_PORT = com1 # programmer connected to serial device |
AVRDUDE_PORT = lpt1 # programmer connected to parallel port |
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex |
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS) |
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep |
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) |
# Uncomment the following if you want avrdude's erase cycle counter. |
# Note that this counter needs to be initialized first using -Yn, |
# see avrdude manual. |
#AVRDUDE_ERASE += -y |
# Uncomment the following if you do /not/ wish a verification to be |
# performed after programming the device. |
AVRDUDE_FLAGS += -V |
# Increase verbosity level. Please use this when submitting bug |
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> |
# to submit bug reports. |
#AVRDUDE_FLAGS += -v -v |
# --------------------------------------------------------------------------- |
# Define directories, if needed. |
DIRAVR = c:/winavr |
DIRAVRBIN = $(DIRAVR)/bin |
DIRAVRUTILS = $(DIRAVR)/utils/bin |
DIRINC = . |
DIRLIB = $(DIRAVR)/avr/lib |
# Define programs and commands. |
SHELL = sh |
CC = avr-gcc |
OBJCOPY = avr-objcopy |
OBJDUMP = avr-objdump |
SIZE = avr-size |
# Programming support using avrdude. |
AVRDUDE = avrdude |
REMOVE = rm -f |
COPY = cp |
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex |
ELFSIZE = $(SIZE) -A $(TARGET).elf |
# Define Messages |
# English |
MSG_ERRORS_NONE = Errors: none |
MSG_BEGIN = -------- begin -------- |
MSG_END = -------- end -------- |
MSG_SIZE_BEFORE = Size before: |
MSG_SIZE_AFTER = Size after: |
MSG_COFF = Converting to AVR COFF: |
MSG_EXTENDED_COFF = Converting to AVR Extended COFF: |
MSG_FLASH = Creating load file for Flash: |
MSG_EEPROM = Creating load file for EEPROM: |
MSG_EXTENDED_LISTING = Creating Extended Listing: |
MSG_SYMBOL_TABLE = Creating Symbol Table: |
MSG_LINKING = Linking: |
MSG_COMPILING = Compiling: |
MSG_ASSEMBLING = Assembling: |
MSG_CLEANING = Cleaning project: |
# Define all object files. |
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) |
# Define all listing files. |
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) |
# Combine all necessary flags and optional flags. |
# Add target processor to flags. |
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS) |
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) |
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) |
# Default target. |
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \ |
$(TARGET).lss $(TARGET).sym sizeafter finished end |
# Eye candy. |
# AVR Studio 3.x does not check make's exit code but relies on |
# the following magic strings to be generated by the compile job. |
begin: |
@echo |
@echo $(MSG_BEGIN) |
finished: |
@echo $(MSG_ERRORS_NONE) |
end: |
@echo $(MSG_END) |
@echo |
# Display size of file. |
sizebefore: |
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi |
sizeafter: |
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi |
# Display compiler version information. |
gccversion : |
@$(CC) --version |
# Convert ELF to COFF for use in debugging / simulating in |
# AVR Studio or VMLAB. |
COFFCONVERT=$(OBJCOPY) --debugging \ |
--change-section-address .data-0x800000 \ |
--change-section-address .bss-0x800000 \ |
--change-section-address .noinit-0x800000 \ |
--change-section-address .eeprom-0x810000 |
coff: $(TARGET).elf |
@echo |
@echo $(MSG_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof |
extcoff: $(TARGET).elf |
@echo |
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof |
# Program the device. |
program: $(TARGET).hex $(TARGET).eep |
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) |
# Create final output files (.hex, .eep) from ELF output file. |
%.hex: %.elf |
@echo |
@echo $(MSG_FLASH) $@ |
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ |
%.eep: %.elf |
@echo |
@echo $(MSG_EEPROM) $@ |
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@ |
# Create extended listing file from ELF output file. |
%.lss: %.elf |
@echo |
@echo $(MSG_EXTENDED_LISTING) $@ |
$(OBJDUMP) -h -S $< > $@ |
# Create a symbol table from ELF output file. |
%.sym: %.elf |
@echo |
@echo $(MSG_SYMBOL_TABLE) $@ |
avr-nm -n $< > $@ |
# Link: create ELF output file from object files. |
.SECONDARY : $(TARGET).elf |
.PRECIOUS : $(OBJ) |
%.elf: $(OBJ) |
@echo |
@echo $(MSG_LINKING) $@ |
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) |
# Compile: create object files from C source files. |
%.o : %.c |
@echo |
@echo $(MSG_COMPILING) $< |
$(CC) -c $(ALL_CFLAGS) $< -o $@ |
# Compile: create assembler files from C source files. |
%.s : %.c |
$(CC) -S $(ALL_CFLAGS) $< -o $@ |
# Assemble: create object files from assembler source files. |
%.o : %.S |
@echo |
@echo $(MSG_ASSEMBLING) $< |
$(CC) -c $(ALL_ASFLAGS) $< -o $@ |
# Target: clean project. |
clean: begin clean_list finished end |
clean_list : |
@echo |
@echo $(MSG_CLEANING) |
# $(REMOVE) $(TARGET).hex |
$(REMOVE) $(TARGET).eep |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).cof |
$(REMOVE) $(TARGET).elf |
$(REMOVE) $(TARGET).map |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).a90 |
$(REMOVE) $(TARGET).sym |
$(REMOVE) $(TARGET).lnk |
$(REMOVE) $(TARGET).lss |
$(REMOVE) $(OBJ) |
$(REMOVE) $(LST) |
$(REMOVE) $(SRC:.c=.s) |
$(REMOVE) $(SRC:.c=.d) |
# Automatically generate C source code dependencies. |
# (Code originally taken from the GNU make user manual and modified |
# (See README.txt Credits).) |
# |
# Note that this will work with sh (bash) and sed that is shipped with WinAVR |
# (see the SHELL variable defined above). |
# This may not work with other shells or other seds. |
# |
%.d: %.c |
set -e; $(CC) -MM $(ALL_CFLAGS) $< \ |
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \ |
[ -s $@ ] || rm -f $@ |
# Remove the '-' if you want to see the dependency files generated. |
-include $(SRC:.c=.d) |
# Listing of phony targets. |
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \ |
clean clean_list program |
/branches/v0.60_MicroMag3_Nick666/trunc/menu.c |
---|
0,0 → 1,128 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
unsigned int TestInt = 0; |
#define ARRAYGROESSE 10 |
unsigned char Array[ARRAYGROESSE] = {1,2,3,4,5,6,7,8,9,10}; |
char DisplayBuff[80] = "Hallo Welt"; |
unsigned char DispPtr = 0; |
unsigned char RemoteTasten = 0; |
#define KEY1 0x01 |
#define KEY2 0x02 |
#define KEY3 0x04 |
#define KEY4 0x08 |
#define KEY5 0x10 |
void LcdClear(void) |
{ |
unsigned char i; |
for(i=0;i<80;i++) DisplayBuff[i] = ' '; |
} |
void Menu(void) |
{ |
static unsigned char MaxMenue = 10,MenuePunkt=0; |
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); } |
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); } |
if((RemoteTasten & KEY1) && (RemoteTasten & KEY2)) MenuePunkt = 0; |
LCD_printfxy(17,0,"[%i]",MenuePunkt); |
switch(MenuePunkt) |
{ |
case 0: |
LCD_printfxy(0,0,"++ MikroKopter ++"); |
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%d%c",PlatinenVersion/10,PlatinenVersion%10,VERSION_HAUPTVERSION, VERSION_NEBENVERSION,VERSION_INDEX+'a'); |
LCD_printfxy(0,2,"Setting: %d ",GetActiveParamSetNumber()); |
LCD_printfxy(0,3,"(c) Holger Buss"); |
// if(RemoteTasten & KEY3) TestInt--; |
// if(RemoteTasten & KEY4) TestInt++; |
break; |
case 1: |
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
LCD_printfxy(0,0,"Hoehe: %5i",HoehenWert); |
LCD_printfxy(0,1,"SollHoehe: %5i",SollHoehe); |
LCD_printfxy(0,2,"Luftdruck: %5i",MessLuftdruck); |
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting); |
} |
else |
{ |
LCD_printfxy(0,1,"Keine "); |
LCD_printfxy(0,2,"Höhenregelung"); |
} |
break; |
case 2: |
LCD_printfxy(0,0,"akt. Lage"); |
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024); |
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024); |
LCD_printfxy(0,3,"Kompass: %5i",KompassValue); |
break; |
case 3: |
LCD_printfxy(0,0,"K1:%4i K2:%4i ",PPM_in[1],PPM_in[2]); |
LCD_printfxy(0,1,"K3:%4i K4:%4i ",PPM_in[3],PPM_in[4]); |
LCD_printfxy(0,2,"K5:%4i K6:%4i ",PPM_in[5],PPM_in[6]); |
LCD_printfxy(0,3,"K7:%4i K8:%4i ",PPM_in[7],PPM_in[8]); |
break; |
case 4: |
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]); |
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]],PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]); |
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]); |
LCD_printfxy(0,3,"P3:%4i P4:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]]); |
break; |
case 5: |
LCD_printfxy(0,0,"Gyro - Sensor"); |
if(PlatinenVersion == 10) |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertNick - AdNeutralNick, AdNeutralNick); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertRoll - AdNeutralRoll, AdNeutralRoll); |
LCD_printfxy(0,3,"Gier %4i (%3i)",MesswertGier, AdNeutralGier); |
} |
else |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertNick - AdNeutralNick, AdNeutralNick/2); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertRoll - AdNeutralRoll, AdNeutralRoll/2); |
LCD_printfxy(0,3,"Gier %4i (%3i)",MesswertGier, AdNeutralGier/2); |
} |
break; |
case 6: |
LCD_printfxy(0,0,"ACC - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertAccNick,NeutralAccX); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertAccRoll,NeutralAccY); |
LCD_printfxy(0,3,"Hoch %4i (%3i)",Mittelwert_AccHoch/*accumulate_AccHoch / messanzahl_AccHoch*/,(int)NeutralAccZ); |
break; |
case 7: |
LCD_printfxy(0,1,"Spannung: %5i",UBat); |
LCD_printfxy(0,2,"Empf.Pegel:%5i",SenderOkay); |
break; |
case 8: |
LCD_printfxy(0,0,"Kompass "); |
LCD_printfxy(0,1,"Richtung: %5i",KompassRichtung); |
LCD_printfxy(0,2,"Messwert: %5i",KompassValue); |
LCD_printfxy(0,3,"Start: %5i",KompassStartwert); |
break; |
case 9: |
LCD_printfxy(0,0,"Poti1: %3i",Poti1); |
LCD_printfxy(0,1,"Poti2: %3i",Poti2); |
LCD_printfxy(0,2,"Poti3: %3i",Poti3); |
LCD_printfxy(0,3,"Poti4: %3i",Poti4); |
break; |
case 10: |
LCD_printfxy(0,0,"Servo " ); |
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl); |
LCD_printfxy(0,2,"Stellung: %3i",ServoValue); |
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax); |
break; |
default: MaxMenue = MenuePunkt - 1; |
MenuePunkt = 0; |
break; |
} |
RemoteTasten = 0; |
} |
/branches/v0.60_MicroMag3_Nick666/trunc/menu.h |
---|
0,0 → 1,6 |
extern void Menu(void); |
extern void LcdClear(void); |
extern char DisplayBuff[80]; |
extern unsigned char DispPtr; |
extern unsigned char RemoteTasten; |
/branches/v0.60_MicroMag3_Nick666/trunc/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/trunc/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/trunc/printf_P.h |
---|
0,0 → 1,19 |
#ifndef _PRINTF_P_H_ |
#define _PRINTF_P_H_ |
#include <avr/pgmspace.h> |
#define OUT_V24 0 |
#define OUT_LCD 1 |
void _printf_P (char, char const *fmt0, ...); |
extern char PrintZiel; |
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args) |
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args) |
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);} |
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);} |
#endif |
/branches/v0.60_MicroMag3_Nick666/trunc/rc.c |
---|
0,0 → 1,85 |
/*####################################################################################### |
Decodieren eines RC Summen Signals |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "rc.h" |
#include "main.h" |
volatile int PPM_in[11]; |
volatile int PPM_diff[11]; // das diffenzierte Stick-Signal |
volatile unsigned char NewPpmData = 1; |
//############################################################################ |
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input |
//Capture Funktion benutzt: |
void rc_sum_init (void) |
//############################################################################ |
{ |
TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64 |
// PWM |
//TCCR1A = (1 << COM1B1) | (1 << WGM11) | (1 << WGM10); |
//TCCR1B |= (1 << WGM12); |
//OCR1B = 55; |
TIMSK1 |= _BV(ICIE1); |
AdNeutralGier = 0; |
AdNeutralRoll = 0; |
AdNeutralNick = 0; |
return; |
} |
//############################################################################ |
//Diese Routine startet und inizialisiert den Timer für RC |
SIGNAL(SIG_INPUT_CAPTURE1) |
//############################################################################ |
{ |
static unsigned int AltICR=0; |
signed int signal = 0,tmp; |
static int index; |
signal = (unsigned int) ICR1 - AltICR; |
AltICR = ICR1; |
//Syncronisationspause? |
if ((signal > 1500) && (signal < 8000)) |
{ |
index = 1; |
NewPpmData = 0; // Null bedeutet: Neue Daten |
// OCR2A = Poti2/2 + 80; |
} |
else |
{ |
if(index < 10) |
{ |
if((signal > 250) && (signal < 687)) |
{ |
signal -= 466; |
// Stabiles Signal |
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;} |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
// if(tmp > signal+1) tmp--; else |
// if(tmp < signal-1) tmp++; |
PPM_diff[index] = tmp - PPM_in[index]; |
PPM_in[index] = tmp; |
} |
index++; |
if(index == 5) PORTD |= 0x20; else PORTD &= ~0x20; // Servosignal an J3 anlegen |
if(index == 6) PORTD |= 0x10; else PORTD &= ~0x10; // Servosignal an J4 anlegen |
if(index == 7) PORTD |= 0x08; else PORTD &= ~0x08; // Servosignal an J5 anlegen |
} |
} |
} |
/branches/v0.60_MicroMag3_Nick666/trunc/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/trunc/timer0.c |
---|
0,0 → 1,165 |
#include "main.h" |
volatile unsigned int CountMilliseconds = 0; |
volatile static unsigned int tim_main; |
volatile unsigned char UpdateMotor = 0; |
volatile unsigned int cntKompass = 0; |
volatile unsigned int beeptime = 0; |
unsigned int BeepMuster = 0xffff; |
int ServoValue = 0; |
enum { |
STOP = 0, |
CK = 1, |
CK8 = 2, |
CK64 = 3, |
CK256 = 4, |
CK1024 = 5, |
T0_FALLING_EDGE = 6, |
T0_RISING_EDGE = 7 |
}; |
SIGNAL (SIG_OVERFLOW0) // 8kHz |
{ |
static unsigned char cnt_1ms = 1,cnt = 0; |
unsigned char pieper_ein = 0; |
// TCNT0 -= 250;//TIMER_RELOAD_VALUE; |
if(!cnt--) |
{ |
cnt = 9; |
cnt_1ms++; |
cnt_1ms %= 2; |
if(!cnt_1ms) UpdateMotor = 1; |
CountMilliseconds++; |
} |
if(beeptime > 1) |
{ |
beeptime--; |
if(beeptime & BeepMuster) |
{ |
pieper_ein = 1; |
} |
else pieper_ein = 0; |
} |
else |
{ |
pieper_ein = 0; |
BeepMuster = 0xffff; |
} |
if(pieper_ein) |
{ |
if(PlatinenVersion == 10) PORTD |= (1<<2); // Speaker an PORTD.2 |
else PORTC |= (1<<7); // Speaker an PORTC.7 |
} |
else |
{ |
if(PlatinenVersion == 10) PORTD &= ~(1<<2); |
else PORTC &= ~(1<<7); |
} |
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) |
{ |
if(PINC & 0x10) |
{ |
cntKompass++; |
} |
else |
{ |
if((cntKompass) && (cntKompass < 4000)) |
{ |
KompassValue = cntKompass; |
} |
// if(cntKompass < 10) cntKompass = 10; |
// KompassValue = (unsigned long)((unsigned long)(cntKompass-10)*720L + 1L) / 703L; |
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180; |
cntKompass = 0; |
} |
} |
} |
void Timer_Init(void) |
{ |
tim_main = SetDelay(10); |
TCCR0B = CK8; |
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM |
OCR0A = 0; |
OCR0B = 120; |
TCNT0 = (unsigned char)-TIMER_RELOAD_VALUE; // reload |
//OCR1 = 0x00; |
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3; |
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22); |
// TIMSK2 |= _BV(TOIE2); |
TIMSK2 |= _BV(OCIE2A); |
TIMSK0 |= _BV(TOIE0); |
OCR2A = 10; |
TCNT2 = 0; |
} |
// ----------------------------------------------------------------------- |
unsigned int SetDelay (unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(CountMilliseconds + t + 1); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
char CheckDelay(unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(((t - CountMilliseconds) & 0x8000) >> 9); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
void Delay_ms(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)); |
} |
void Delay_ms_Mess(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)) ANALOG_ON; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Servo ansteuern |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(SIG_OUTPUT_COMPARE2A) |
{ |
static unsigned char timer = 10; |
if(!timer--) |
{ |
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3; |
ServoValue = Parameter_ServoNickControl; |
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512; |
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512; |
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin; |
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax; |
OCR2A = ServoValue;// + 75; |
timer = EE_Parameter.ServoNickRefresh; |
} |
else |
{ |
TCCR2A =3; |
PORTD&=~0x80; |
} |
} |
/branches/v0.60_MicroMag3_Nick666/trunc/timer0.h |
---|
0,0 → 1,16 |
#define TIMER_TEILER CK8 |
#define TIMER_RELOAD_VALUE 250 |
void Timer_Init(void); |
void Delay_ms(unsigned int); |
void Delay_ms_Mess(unsigned int); |
unsigned int SetDelay (unsigned int t); |
char CheckDelay (unsigned int t); |
extern volatile unsigned int CountMilliseconds; |
extern volatile unsigned char UpdateMotor; |
extern volatile unsigned int beeptime; |
extern volatile unsigned int cntKompass; |
extern int ServoValue; |
extern unsigned int BeepMuster; |
/branches/v0.60_MicroMag3_Nick666/trunc/twimaster.c |
---|
0,0 → 1,152 |
/*############################################################################ |
############################################################################*/ |
#include "main.h" |
unsigned char twi_state = 0; |
unsigned char motor = 0; |
unsigned char motorread = 0; |
unsigned char motor_rx[8]; |
//############################################################################ |
//Initzialisieren der I2C (TWI) Schnittstelle |
void i2c_init(void) |
//############################################################################ |
{ |
TWSR = 0; |
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2; |
} |
//############################################################################ |
//Start I2C |
char i2c_start(void) |
//############################################################################ |
{ |
TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE); |
return(0); |
} |
//############################################################################ |
//Start I2C |
void i2c_stop(void) |
//############################################################################ |
{ |
TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT); |
} |
void i2c_reset(void) |
//############################################################################ |
{ |
i2c_stop(); |
twi_state = 0; |
motor = TWDR; |
motor = 0; |
TWCR = 0x80; |
TWAMR = 0; |
TWAR = 0; |
TWDR = 0; |
TWSR = 0; |
TWBR = 0; |
i2c_init(); |
i2c_start(); |
i2c_write_byte(0); |
} |
//############################################################################ |
//Start I2C |
char i2c_write_byte(char byte) |
//############################################################################ |
{ |
TWSR = 0x00; |
TWDR = byte; |
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE); |
return(0); |
} |
//############################################################################ |
//Start I2C |
SIGNAL (TWI_vect) |
//############################################################################ |
{ |
switch (twi_state++) |
{ |
case 0: |
i2c_write_byte(0x52+(motor*2)); |
break; |
case 1: |
switch(motor++) |
{ |
case 0: |
i2c_write_byte(Motor_Vorne); |
break; |
case 1: |
i2c_write_byte(Motor_Hinten); |
break; |
case 2: |
i2c_write_byte(Motor_Rechts); |
break; |
case 3: |
i2c_write_byte(Motor_Links); |
break; |
} |
break; |
case 2: |
i2c_stop(); |
if (motor<4) twi_state = 0; |
else motor = 0; |
i2c_start(); |
break; |
//Liest Daten von Motor |
case 3: |
i2c_write_byte(0x53+(motorread*2)); |
break; |
case 4: |
switch(motorread) |
{ |
case 0: |
i2c_write_byte(Motor_Vorne); |
break; |
case 1: |
i2c_write_byte(Motor_Hinten); |
break; |
case 2: |
i2c_write_byte(Motor_Rechts); |
break; |
case 3: |
i2c_write_byte(Motor_Links); |
break; |
} |
break; |
case 5: //1 Byte vom Motor lesen |
motor_rx[motorread] = TWDR; |
case 6: |
switch(motorread) |
{ |
case 0: |
i2c_write_byte(Motor_Vorne); |
break; |
case 1: |
i2c_write_byte(Motor_Hinten); |
break; |
case 2: |
i2c_write_byte(Motor_Rechts); |
break; |
case 3: |
i2c_write_byte(Motor_Links); |
break; |
} |
break; |
case 7: //2 Byte vom Motor lesen |
motor_rx[motorread+4] = TWDR; |
motorread++; |
if (motorread>3) motorread=0; |
i2c_stop(); |
I2CTimeout = 10; |
twi_state = 0; |
} |
TWCR |= 0x80; |
} |
/branches/v0.60_MicroMag3_Nick666/trunc/twimaster.h |
---|
0,0 → 1,33 |
/*############################################################################ |
############################################################################*/ |
#ifndef _I2C_MASTER_H |
#define _I2C_MASTER_H |
//############################################################################ |
// I2C Konstanten |
#define SCL_CLOCK 200000L |
#define I2C_TIMEOUT 30000 |
#define I2C_START 0x08 |
#define I2C_REPEATED_START 0x10 |
#define I2C_TX_SLA_ACK 0x18 |
#define I2C_TX_DATA_ACK 0x28 |
#define I2C_RX_SLA_ACK 0x40 |
#define I2C_RX_DATA_ACK 0x50 |
//############################################################################ |
extern unsigned char twi_state; |
extern unsigned char motor; |
extern unsigned char motorread; |
extern unsigned char motor_rx[8]; |
void i2c_reset(void); |
extern void i2c_init (void); // I2C initialisieren |
extern char i2c_start (void); // Start I2C |
extern void i2c_stop (void); // Stop I2C |
extern char i2c_write_byte (char byte); // 1 Byte schreiben |
extern void i2c_reset(void); |
#endif |
/branches/v0.60_MicroMag3_Nick666/trunc/uart.c |
---|
0,0 → 1,335 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) 04.2007 Holger Buss |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "uart.h" |
unsigned char DebugGetAnforderung = 0,DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0; |
unsigned volatile char SioTmp = 0; |
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF]; |
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF]; |
unsigned volatile char NMEABuffer[MAX_EMPFANGS_BUFF]; |
unsigned volatile char NeuerDatensatzEmpfangen = 0; |
unsigned volatile char NeueKoordinateEmpfangen = 0; |
unsigned volatile char UebertragungAbgeschlossen = 1; |
unsigned volatile char CntCrcError = 0; |
unsigned volatile char AnzahlEmpfangsBytes = 0; |
unsigned volatile char PC_DebugTimeout = 0; |
unsigned char NurKanalAnforderung = 0; |
unsigned char PcZugriff = 100; |
unsigned char MotorTest[4] = {0,0,0,0}; |
unsigned char MeineSlaveAdresse; |
struct str_DebugOut DebugOut; |
struct str_Debug DebugIn; |
struct str_VersionInfo VersionInfo; |
int Debug_Timer; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Sende-Part der Datenübertragung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(INT_VEC_TX) |
{ |
static unsigned int ptr = 0; |
unsigned char tmp_tx; |
if(!UebertragungAbgeschlossen) |
{ |
ptr++; // die [0] wurde schon gesendet |
tmp_tx = SendeBuffer[ptr]; |
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF)) |
{ |
ptr = 0; |
UebertragungAbgeschlossen = 1; |
} |
UDR = tmp_tx; |
} |
else ptr = 0; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(INT_VEC_RX) |
{ |
static unsigned int crc; |
static unsigned char crc1,crc2,buf_ptr; |
static unsigned char UartState = 0; |
unsigned char CrcOkay = 0; |
SioTmp = UDR; |
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0; |
if(SioTmp == '\r' && UartState == 2) |
{ |
UartState = 0; |
crc -= RxdBuffer[buf_ptr-2]; |
crc -= RxdBuffer[buf_ptr-1]; |
crc %= 4096; |
crc1 = '=' + crc / 64; |
crc2 = '=' + crc % 64; |
CrcOkay = 0; |
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;}; |
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet |
{ |
NeuerDatensatzEmpfangen = 1; |
AnzahlEmpfangsBytes = buf_ptr; |
RxdBuffer[buf_ptr] = '\r'; |
if(RxdBuffer[2] == 'R') wdt_enable(WDTO_250MS); // Reset-Commando |
} |
} |
else |
switch(UartState) |
{ |
case 0: |
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet |
buf_ptr = 0; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc = SioTmp; |
break; |
case 1: // Adresse auswerten |
UartState++; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc += SioTmp; |
break; |
case 2: // Eingangsdaten sammeln |
RxdBuffer[buf_ptr] = SioTmp; |
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++; |
else UartState = 0; |
crc += SioTmp; |
break; |
default: |
UartState = 0; |
break; |
} |
} |
// -------------------------------------------------------------------------- |
void AddCRC(unsigned int wieviele) |
{ |
unsigned int tmpCRC = 0,i; |
for(i = 0; i < wieviele;i++) |
{ |
tmpCRC += SendeBuffer[i]; |
} |
tmpCRC %= 4096; |
SendeBuffer[i++] = '=' + tmpCRC / 64; |
SendeBuffer[i++] = '=' + tmpCRC % 64; |
SendeBuffer[i++] = '\r'; |
UebertragungAbgeschlossen = 0; |
UDR = SendeBuffer[0]; |
} |
// -------------------------------------------------------------------------- |
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len) |
{ |
unsigned int pt = 0; |
unsigned char a,b,c; |
unsigned char ptr = 0; |
SendeBuffer[pt++] = '#'; // Startzeichen |
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...) |
SendeBuffer[pt++] = cmd; // Commando |
while(len) |
{ |
if(len) { a = snd[ptr++]; len--;} else a = 0; |
if(len) { b = snd[ptr++]; len--;} else b = 0; |
if(len) { c = snd[ptr++]; len--;} else c = 0; |
SendeBuffer[pt++] = '=' + (a >> 2); |
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
SendeBuffer[pt++] = '=' + ( c & 0x3f); |
} |
AddCRC(pt); |
} |
// -------------------------------------------------------------------------- |
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer |
{ |
unsigned char a,b,c,d; |
unsigned char ptr = 0; |
unsigned char x,y,z; |
while(len) |
{ |
a = RxdBuffer[ptrIn++] - '='; |
b = RxdBuffer[ptrIn++] - '='; |
c = RxdBuffer[ptrIn++] - '='; |
d = RxdBuffer[ptrIn++] - '='; |
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden |
x = (a << 2) | (b >> 4); |
y = ((b & 0x0f) << 4) | (c >> 2); |
z = ((c & 0x03) << 6) | d; |
if(len--) ptrOut[ptr++] = x; else break; |
if(len--) ptrOut[ptr++] = y; else break; |
if(len--) ptrOut[ptr++] = z; else break; |
} |
} |
// -------------------------------------------------------------------------- |
void BearbeiteRxDaten(void) |
{ |
if(!NeuerDatensatzEmpfangen) return; |
// unsigned int tmp_int_arr1[1]; |
// unsigned int tmp_int_arr2[2]; |
// unsigned int tmp_int_arr3[3]; |
unsigned char tmp_char_arr2[2]; |
// unsigned char tmp_char_arr3[3]; |
// unsigned char tmp_char_arr4[4]; |
//if(!MotorenEin) |
PcZugriff = 255; |
switch(RxdBuffer[2]) |
{ |
case 'c':// Debugdaten incl. Externe IOs usw |
Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes); |
/* for(unsigned char i=0; i<4;i++) |
{ |
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]); |
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8); |
}*/ |
RemoteTasten |= DebugIn.RemoteTasten; |
DebugDataAnforderung = 1; |
break; |
case 'h':// x-1 Displayzeilen |
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes); |
RemoteTasten |= tmp_char_arr2[0]; |
if(tmp_char_arr2[1] == 255) NurKanalAnforderung = 1; else NurKanalAnforderung = 0; // keine Displaydaten |
DebugDisplayAnforderung = 1; |
break; |
case 't':// Motortest |
Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes); |
break; |
case 'v': // Version-Anforderung und Ausbaustufe |
GetVersionAnforderung = 1; |
break; |
case 'g':// "Get"-Anforderung für Debug-Daten |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
DebugGetAnforderung = 1; |
break; |
case 'q':// "Get"-Anforderung für Settings |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes); |
if(tmp_char_arr2[0] != 0xff) |
{ |
if(tmp_char_arr2[0] > 5) tmp_char_arr2[0] = 5; |
ReadParameterSet(tmp_char_arr2[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE); |
} |
else |
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE); |
break; |
case 'l': |
case 'm': |
case 'n': |
case 'o': |
case 'p': // Parametersatz speichern |
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],STRUCT_PARAM_LAENGE,3,AnzahlEmpfangsBytes); |
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], RxdBuffer[2] - 'l' + 1); // aktiven Datensatz merken |
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
Piep(GetActiveParamSetNumber()); |
break; |
} |
// DebugOut.AnzahlZyklen = Debug_Timer_Intervall; |
NeuerDatensatzEmpfangen = 0; |
} |
//############################################################################ |
//Routine für die Serielle Ausgabe |
int uart_putchar (char c) |
//############################################################################ |
{ |
if (c == '\n') |
uart_putchar('\r'); |
//Warten solange bis Zeichen gesendet wurde |
loop_until_bit_is_set(USR, UDRE); |
//Ausgabe des Zeichens |
UDR = c; |
return (0); |
} |
// -------------------------------------------------------------------------- |
void WriteProgramData(unsigned int pos, unsigned char wert) |
{ |
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert; |
// else eeprom_write_byte(&EE_Buffer[pos], wert); |
// Buffer[pos] = wert; |
} |
//############################################################################ |
//INstallation der Seriellen Schnittstelle |
void UART_Init (void) |
//############################################################################ |
{ |
//Enable TXEN im Register UCR TX-Data Enable & RX Enable |
UCR=(1 << TXEN) | (1 << RXEN); |
// UART Double Speed (U2X) |
USR |= (1<<U2X); |
// RX-Interrupt Freigabe |
UCSRB |= (1<<RXCIE); |
// TX-Interrupt Freigabe |
UCSRB |= (1<<TXCIE); |
//Teiler wird gesetzt |
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1); |
//UBRR = 33; |
//öffnet einen Kanal für printf (STDOUT) |
//fdevopen (uart_putchar, 0); |
//sbi(PORTD,4); |
Debug_Timer = SetDelay(200); |
} |
//--------------------------------------------------------------------------------------------- |
void DatenUebertragung(void) |
{ |
static char dis_zeile = 0; |
if(!UebertragungAbgeschlossen) return; |
if(DebugGetAnforderung && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
{ |
SendOutData('G',MeineSlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn)); |
DebugGetAnforderung = 0; |
} |
if((CheckDelay(Debug_Timer) || DebugDataAnforderung) && UebertragungAbgeschlossen) |
{ |
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut)); |
DebugDataAnforderung = 0; |
Debug_Timer = SetDelay(MIN_DEBUG_INTERVALL); |
} |
if(DebugDisplayAnforderung && UebertragungAbgeschlossen) |
{ |
Menu(); |
DebugDisplayAnforderung = 0; |
if(++dis_zeile == 4 || NurKanalAnforderung) |
{ |
SendOutData('4',0,(unsigned char *)&PPM_in,sizeof(PPM_in)); // DisplayZeile übertragen |
dis_zeile = -1; |
} |
else SendOutData('0' + dis_zeile,0,(unsigned char *)&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen |
} |
if(GetVersionAnforderung && UebertragungAbgeschlossen) |
{ |
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo)); |
GetVersionAnforderung = 0; |
} |
} |
/branches/v0.60_MicroMag3_Nick666/trunc/uart.h |
---|
0,0 → 1,94 |
#ifndef _UART_H |
#define _UART_H |
#define MAX_SENDE_BUFF 150 |
#define MAX_EMPFANGS_BUFF 150 |
void BearbeiteRxDaten(void); |
extern unsigned char DebugGetAnforderung; |
extern unsigned volatile char SendeBuffer[MAX_SENDE_BUFF]; |
extern unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF]; |
extern unsigned volatile char UebertragungAbgeschlossen; |
extern unsigned volatile char PC_DebugTimeout; |
extern unsigned volatile char NeueKoordinateEmpfangen; |
extern unsigned char MeineSlaveAdresse; |
extern unsigned char PcZugriff; |
extern int Debug_Timer; |
extern void UART_Init (void); |
extern int uart_putchar (char c); |
extern void boot_program_page (uint32_t page, uint8_t *buf); |
extern void DatenUebertragung(void); |
extern void DecodeNMEA(void); |
extern void BearbeiteRxDaten(void); |
extern unsigned char MotorTest[4]; |
struct str_DebugOut |
{ |
unsigned char Digital[2]; |
unsigned int Analog[32]; // Debugwerte |
}; |
extern struct str_DebugOut DebugOut; |
struct str_Debug |
{ |
unsigned char Digital[2]; |
unsigned char RemoteTasten; |
unsigned int Analog[4]; |
}; |
extern struct str_Debug DebugIn; |
struct str_VersionInfo |
{ |
unsigned char Hauptversion; |
unsigned char Nebenversion; |
unsigned char PCKompatibel; |
unsigned char Rserved[7]; |
}; |
extern struct str_VersionInfo VersionInfo; |
//Die Baud_Rate der Seriellen Schnittstelle ist 9600 Baud |
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle |
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle |
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle |
//#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle |
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle |
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird |
#if defined (__AVR_ATmega128__) |
# define USR UCSR0A |
# define UCR UCSR0B |
# define UDR UDR0 |
# define UBRR UBRR0L |
# define EICR EICRB |
#endif |
#if defined (__AVR_ATmega32__) |
# define USR UCSRA |
# define UCR UCSRB |
# define UBRR UBRRL |
# define EICR EICRB |
# define INT_VEC_RX SIG_UART_RECV |
# define INT_VEC_TX SIG_UART_TRANS |
#endif |
#if defined (__AVR_ATmega644__) |
# define USR UCSR0A |
# define UCR UCSR0B |
# define UDR UDR0 |
# define UBRR UBRR0L |
# define EICR EICR0B |
# define TXEN TXEN0 |
# define RXEN RXEN0 |
# define RXCIE RXCIE0 |
# define TXCIE TXCIE0 |
# define U2X U2X0 |
# define UCSRB UCSR0B |
# define UDRE UDRE0 |
# define INT_VEC_RX SIG_USART_RECV |
# define INT_VEC_TX SIG_USART_TRANS |
#endif |
#endif //_UART_H |
/branches/v0.60_MicroMag3_Nick666/trunc/version.txt |
---|
0,0 → 1,91 |
------- |
V0.53 27.04.2007 H.Buss |
- erste öffentliche Version |
V0.53b 29.04.2007 H.Buss |
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft |
V0.53c 29.04.2007 H.Buss |
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind. |
Die angezeigten Werte waren nicht die Werte der Funke |
V0.54 01.05.2007 H.Buss |
- die Paramtersätze können jetzt vor dem Start ausgewählt werden |
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt: |
2 3 4 |
1 x 5 |
- - - |
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw. |
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt |
V0.55 14.05.2007 H.Buss |
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden |
V0.56 14.05.2007 H.Buss |
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren |
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen |
V0.57 24.05.2007 H.Buss |
- Der Höhenregler kann nun auch mittels Schalter bedient werden |
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat |
- Kompass-Einfluss dämpfen bei Neigung |
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen |
- Der Motortest vom Kopter-Tool geht jetzt |
- Man kann den Parametersätzen einen Namen geben |
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert |
V0.58 30.05.2007 H.Buss |
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist |
V0.60 17.08.2007 H.Buss |
- "Schwindel-Bug" behoben |
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft |
- Poti4 zugefügt |
- Es werden jetzt 8 Kanäle ausgewertet |
- Kamera-Servo (an J7) |
- Die Settings müssen überschrieben werden |
V0.61 - V0.63 H.Buss 27.09.2007 |
- Poti 4 und Kanal 8 werden im Menü angezeigt |
- ein paar Kleinigkeiten bei den DefaultKonstanten2 bereinigt |
- Analog.c: Aktuell_ax korrigiert |
- auf 32 Debug-Kanäle erweitert |
- Loopings sind jetzt möglich und einzeln im KopterTool freischaltbar |
- leichte Anpassungen im Gier - Geschwindigkeit und Drift |
- die Hardwareversion V1.1 wird erkannt und das Programm stellt sich auf die geänderte Gyroverstärkung und die geänderten Portpins ein |
- die Software startet nach dem Einschalten schneller, weil der Luftdruckoffset schneller gefunden wird |
- die PPM-Ausgänge liegen wieder an den Pins an |
- Details an der Sensordatenverarbeitung -> es fliegt sich geringfügig anders |
- der MK ist bei wenig Gas nicht mehr so giftig -> soll das Landen vereinfachen |
- I2C-Bus läuft jetzt sicher nach einer Störung wieder an |
- Sticksignale werden präziser ausgewertet |
- Stick-Kanäle werden ans Kopter-Tool übertragen |
- Es muss die Version V1.47 des Kopter-Tool verwendet werden |
- Die Settings werden auf Default zurückgesetzt |
- am Piepen kann man die Fehlerart unterscheiden |
1. einzelnes Piepen beim Einschalten und Kalibrieren |
2. langsames Intervall mindestens 1 Sek -> Empfangsausfall |
3. schnelleres Intervall mindestens 1 Sek -> Akku |
4. sehr schnelles Intervall mindestens 1 Sek -> Kommunikation zu den Reglern gestört |
V0.64 H.Buss 30.09.2007 |
- beim Gieren wurden die Achsen nicht hart genug geregelt |
V0.65a H.Buss 15.10.2007 |
- Integral im Mischer wieder integriert |
- Feinabstimmung im ACC/Gyro Abgleich -> 1/32 & 100 |
- ACC/Gyro Abgleich auch bei HH |
V0.66a H.Buss 3.11.2007 |
- Messwertverarbeitung aus dem Analog-Interrupt entfernt |
- Analogmessung hängt jetzt am FC-Timing |
- Looping-Stick-Hysterese eingebaut |
- Looping-180°-Umschlag einstellbar |
- Achsenkopplung: Gierbewegung verkoppelt Nick und Roll |
- Lageregelung nach ACC-Sensor verbessert |
- zusätzlicher I-Anteil in der Lageregelung verbessert die Neutrallage |
- Gyrodriftkompensation überarbeitet |
- Bug in der Gier-Stick-Berechnung behoben |
- Gyro-Messung auf 1kHz beschleunigt |