Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 512 → Rev 554

/branches/v0.60_MicroMag3_Nick666/license_buss.txt
File deleted
/branches/v0.60_MicroMag3_Nick666/COPYING.LESSER
File deleted
/branches/v0.60_MicroMag3_Nick666/uart.h
File deleted
/branches/v0.60_MicroMag3_Nick666/old_macros.h
File deleted
/branches/v0.60_MicroMag3_Nick666/_Settings.h
File deleted
/branches/v0.60_MicroMag3_Nick666/gps.h
File deleted
/branches/v0.60_MicroMag3_Nick666/rc.h
File deleted
/branches/v0.60_MicroMag3_Nick666/rc.c
File deleted
/branches/v0.60_MicroMag3_Nick666/flight.pnps
File deleted
\ No newline at end of file
/branches/v0.60_MicroMag3_Nick666/version.txt
File deleted
\ No newline at end of file
/branches/v0.60_MicroMag3_Nick666/GPS.c
File deleted
/branches/v0.60_MicroMag3_Nick666/analog.c
File deleted
/branches/v0.60_MicroMag3_Nick666/analog.h
File deleted
/branches/v0.60_MicroMag3_Nick666/printf_P.c
File deleted
/branches/v0.60_MicroMag3_Nick666/Flight-Ctrl_MEGA644_V0_60_MM3.hex
File deleted
/branches/v0.60_MicroMag3_Nick666/printf_P.h
File deleted
/branches/v0.60_MicroMag3_Nick666/README.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/branches/v0.60_MicroMag3_Nick666/twimaster.c
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/printf_P.c
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/version.txt
File deleted
\ No newline at end of file
/branches/v0.60_MicroMag3_Nick666/v0.66c/twimaster.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/README.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/branches/v0.60_MicroMag3_Nick666/v0.66c/printf_P.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/eeprom.c
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/eeprom.d
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/fc.c
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/GPS.c
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/fc.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/mymath.c
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/analog.c
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/FlightCtrl.aps
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/flight.pnproj
File deleted
\ No newline at end of file
/branches/v0.60_MicroMag3_Nick666/v0.66c/menu.c
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/mymath.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/rc.c
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/compass.c
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/analog.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/rc.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/menu.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/compass.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/license_buss.txt
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/flight.pnps
File deleted
\ No newline at end of file
/branches/v0.60_MicroMag3_Nick666/v0.66c/uart.c
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/uart.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/COPYING.LESSER
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/main.c
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/COPYING
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/old_macros.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/main.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/makefile
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/gps.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/timer0.c
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/_Settings.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/timer0.h
File deleted
/branches/v0.60_MicroMag3_Nick666/v0.66c/twimaster.c
File deleted
/branches/v0.60_MicroMag3_Nick666/COPYING
File deleted
/branches/v0.60_MicroMag3_Nick666/flight.pnproj
File deleted
\ No newline at end of file
/branches/v0.60_MicroMag3_Nick666/twimaster.h
File deleted
/branches/v0.60_MicroMag3_Nick666/main.c
File deleted
/branches/v0.60_MicroMag3_Nick666/timer0.h
File deleted
/branches/v0.60_MicroMag3_Nick666/timer0.c
File deleted
/branches/v0.60_MicroMag3_Nick666/menu.c
File deleted
/branches/v0.60_MicroMag3_Nick666/compass.c
File deleted
/branches/v0.60_MicroMag3_Nick666/main.h
File deleted
/branches/v0.60_MicroMag3_Nick666/math.c
File deleted
/branches/v0.60_MicroMag3_Nick666/menu.h
File deleted
/branches/v0.60_MicroMag3_Nick666/compass.h
File deleted
/branches/v0.60_MicroMag3_Nick666/math.h
File deleted
/branches/v0.60_MicroMag3_Nick666/fc.c
File deleted
/branches/v0.60_MicroMag3_Nick666/fc.h
File deleted
/branches/v0.60_MicroMag3_Nick666/makefile
File deleted
/branches/v0.60_MicroMag3_Nick666/uart.c
File deleted
/branches/v0.60_MicroMag3_Nick666/V0.67g/COPYING
0,0 → 1,674
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
 
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
 
Preamble
 
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
 
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
 
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
 
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
 
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
 
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
 
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
 
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
 
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
 
The precise terms and conditions for copying, distribution and
modification follow.
 
TERMS AND CONDITIONS
 
0. Definitions.
 
"This License" refers to version 3 of the GNU General Public License.
 
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
 
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
 
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
 
A "covered work" means either the unmodified Program or a work based
on the Program.
 
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
 
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
 
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
 
1. Source Code.
 
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
 
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
 
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
 
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
 
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
 
The Corresponding Source for a work in source code form is that
same work.
 
2. Basic Permissions.
 
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
 
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
 
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
 
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
 
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
 
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
 
4. Conveying Verbatim Copies.
 
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
 
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
 
5. Conveying Modified Source Versions.
 
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
 
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
 
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
 
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
 
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
 
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
 
6. Conveying Non-Source Forms.
 
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
 
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
 
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
 
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
 
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
 
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
 
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
 
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
 
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
 
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
 
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
 
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
 
7. Additional Terms.
 
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
 
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
 
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
 
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
 
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
 
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
 
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
 
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
 
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
 
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
 
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
 
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
 
8. Termination.
 
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
 
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
 
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
 
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
 
9. Acceptance Not Required for Having Copies.
 
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
 
10. Automatic Licensing of Downstream Recipients.
 
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
 
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
 
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
 
11. Patents.
 
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
 
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
 
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
 
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
 
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
 
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
 
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
 
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
 
12. No Surrender of Others' Freedom.
 
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
 
13. Use with the GNU Affero General Public License.
 
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
 
14. Revised Versions of this License.
 
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
 
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
 
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
 
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
 
15. Disclaimer of Warranty.
 
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
 
16. Limitation of Liability.
 
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
 
17. Interpretation of Sections 15 and 16.
 
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
 
END OF TERMS AND CONDITIONS
 
How to Apply These Terms to Your New Programs
 
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
 
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
 
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
 
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
 
Also add information on how to contact you by electronic and paper mail.
 
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
 
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
 
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
 
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
 
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
/branches/v0.60_MicroMag3_Nick666/V0.67g/COPYING.LESSER
0,0 → 1,165
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
 
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
 
 
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
 
0. Additional Definitions.
 
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
 
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
 
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
 
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
 
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
 
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
 
1. Exception to Section 3 of the GNU GPL.
 
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
 
2. Conveying Modified Versions.
 
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
 
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
 
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
 
3. Object Code Incorporating Material from Library Header Files.
 
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
 
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
 
b) Accompany the object code with a copy of the GNU GPL and this license
document.
 
4. Combined Works.
 
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
 
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
 
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
 
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
 
d) Do one of the following:
 
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
 
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
 
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
 
5. Combined Libraries.
 
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
 
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
 
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
 
6. Revised Versions of the GNU Lesser General Public License.
 
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
 
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
 
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
/branches/v0.60_MicroMag3_Nick666/V0.67g/Flight-Ctrl_MEGA644_V0_67g.hex
0,0 → 1,2005
:100000000C94C3030C94E0030C94E0030C94E00301
:100010000C94E0030C94E0030C94E0030C94E003D4
:100020000C94E0030C94E40C0C94E0030C94E003B7
:100030000C9442160C94E0030C94E0030C94E0033F
:100040000C94E0030C94E0030C94870D0C94173788
:100050000C9488060C94E0030C9452060C94E00374
:100060000C942F0E0C94E0030C9480150C94E00378
:100070002109D9092D09D909D909D9096F094009D7
:10008000D909D90962099B099B099B099B099B090D
:100090007309D909D9095B09D9096B09590E6E0E83
:1000A000770E810E9E0EB60ECF0EEC0E090F260FA8
:1000B000F40F3E118611E7113D1291121513BC1376
:1000C000121436146C14A814E6141F1599159E15F5
:1000D000AF15BD15CA15C215CA15DE150A0A0D00E1
:1000E0004E65757472616C0048656164696E67483D
:1000F0006F6C64000A0D537465756572756E673AAE
:1001000020004F4B0A0D000A0D4162676C65696360
:1001100068204C756674647275636B73656E736F7B
:10012000722E2E000A0D4B616C69627269657265F0
:10013000204B6F6D70617373000A0D42656E7574AC
:100140007A6520506172616D657465727361747A4D
:10015000202564000A0D414343206E6963687420C2
:1001600061626765676C696368656E21000A0D49A5
:100170006E69742E20454550524F4D3A2047656EAA
:100180006572696572652044656661756C742D5091
:100190006172616D657465722E2E2E000A0D3D3DF3
:1001A0003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D7F
:1001B0003D3D3D3D3D3D3D3D3D3D3D3D000A0D4606
:1001C0006C69676874436F6E74726F6C0A0D486176
:1001D0007264776172653A25642E25640A0D536F47
:1001E0006674776172653A5625642E25642563200E
:1001F000002E005A5F52616E67653A2020253469EF
:1002000000595F52616E67653A20202534690058B5
:100210005F52616E67653A2020253469004D4D3389
:100220002052616E6765005A5F4F66667365743A67
:10023000202025336900595F4F66667365743A2044
:100240002025336900585F4F66667365743A202035
:10025000253369004D4D33204F66660052616E674D
:10026000653A2533692D253369005374656C6C75C7
:100270006E673A2025336900536574706F696E7438
:10028000202025336900536572766F202000506F5F
:100290007469343A202025336900506F7469333A09
:1002A000202025336900506F7469323A20202533AD
:1002B0006900506F7469313A202025336900537406
:1002C0006172743A2020202020253569004D657325
:1002D00073776572743A2020253569005269636826
:1002E00074756E673A2020253569004B6F6D70611B
:1002F00073732020202020202000456D70662E5032
:100300006567656C3A253569005370616E6E756E70
:10031000673A202025356900486F636820253469D5
:1003200020282533692900526F6C6C202534692000
:100330002825336929004E69636B202534692028FC
:100340002533692900414343202D2053656E736F87
:100350007200476965722025346920282533692990
:1003600000526F6C6C2025346920282533692900E0
:100370004E69636B2025346920282533692900479D
:100380006965722025346920282533692900526F58
:100390006C6C20253469202825336929004E696357
:1003A0006B20253469202825336929004779726F2D
:1003B000202D2053656E736F720050333A253469D7
:1003C000202050343A253469200050313A253469D0
:1003D000202050323A253469200047733A25346989
:1003E000202047693A25346920004E693A2534694E
:1003F0002020526F3A25346920004B373A25346962
:1004000020204B383A25346920004B353A25346991
:1004100020204B363A25346920004B333A25346985
:1004200020204B343A25346920004B313A25346979
:1004300020204B323A25346920004B6F6D70617378
:10044000733A20202025356900526F6C6C3A2020C9
:1004500020202020253569004E69636B3A2020203A
:1004600020202025356900616B742E204C61676562
:100470000048F668656E726567656C756E67004B5F
:1004800065696E6520004F66662020202020203A96
:1004900020253569004C756674647275636B3A206B
:1004A00025356900536F6C6C486F6568653A202587
:1004B000356900486F6568653A2020202020253581
:1004C000690028632920486F6C6765722042757344
:1004D000730053657474696E673A20256420004880
:1004E000573A5625642E25642053573A25642E2505
:1004F000642563002B2B204D696B726F4B6F7074FA
:100500006572202B2B005B25695D0000010203054D
:10051000060708090A0B0C0D0F10111213141516FB
:100520001718191A1B1B1C1D1E1F202121222324F2
:1005300025252627272829292A2B2B2C2C2D2E2E22
:100540002F2F303031313232333334343435353685
:10055000363637373838383939393A3A3A3B3B3B0F
:100560003C3C3C3C3D3D3D3D3E3E3E3E3F3F3F3FB3
:100570004040404041414141414242424242434366
:100580004343434344444444444445454545454529
:1005900045464646464646464647474747474747F5
:1005A00047484848484848484848494949494949C6
:1005B000494949494A4A4A4A4A4A4A4A4A4A4A4A9F
:1005C0004B4B4B4B4B4B4B4B4B4B4B4B4B4C4C4C78
:1005D0004C4C4C4C4C4C4C4C4C4C4C4C4D4D4D4D57
:1005E0004D4D4D4D4D4D4D4D4D4D4D4D4D4E4E4E38
:1005F0004E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E1B
:100600004E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4FFB
:100610004F4F4F4F4F4F4F4F4F0000000056F88E37
:100620003CC7F20E3D465E563D7FDC8E3DB07EB24D
:100630003D0A13D63D9D96F93D65830E3E5E302002
:100640003ED5D0313E6F63433ECEE6543E8E596672
:100650003E60BA773EED83843E55208D3EBEB19517
:100660003E7A379E3EDDB0A63E421DAF3EFF7BB7D1
:100670003E70CCBF3EE80DC83EC83FD03E6A61D850
:100680003E2D72E03E7171E83E925EF03EF738F822
:100690003E0000003F89D9033FCBA8073F766D0B92
:1006A0003F44270F3FE7D5123F1779163F8C101AAA
:1006B0003FFE9B1D3F241B213FBA8D243F7CF32727
:1006C0003F254C2B3F71972E3F22D5313FF4043507
:1006D0003FA726383FFF393B3FBD3E3E3FA6344152
:1006E0003F7C1B443F09F3463F12BB493F60734CBC
:1006F0003FBD1B4F3FF2B3513FCF3B543F1EB3565C
:100700003FAE19593F516F5B3FD7B35D3F14E75F71
:100710003FDB08623F0119643F5D17663FCA03680B
:100720003F1DDE693F34A66B3FEB5B6D3F20FF6EE4
:100730003FB28F703F820D723F7078733F63D07409
:100740003F3F15763FEA46773F4D65783F527079D7
:100750003FE2677A3FEC4B7B3F5C1C7C3F24D97CBB
:100760003F36827D3F80177E3FFD987E3F9E067F0D
:100770003F5B607F3F2FA67F3F13D87F3F05F67F0B
:100780003F0000803F0011241FBECFEFD0E1DEBF4D
:10079000CDBF13E0A0E0B1E0E2E8FAE702C00590C7
:1007A0000D92A23AB107D9F717E0A2EAB3E001C06F
:1007B0001D92A13CB107E1F70E9420040C94403D3A
:1007C0000C94000022E030E0D9010E94223D802DEF
:1007D000863028F082E0D901082E0E942F3D99270B
:1007E0000895FB01863008F085E0282F2150842FE2
:1007F0009927A6E42A9FD0011124A65FBF4F019735
:1008000024F001900E942F3DFACFA2E0B0E0022E2A
:100810000E942F3D0895FB01282F863008F025E027
:10082000842F99272150A6E42A9FD0011124A65F86
:10083000BF4F019724F00E94223D0192FACF089504
:100840001F93CF93DF9314B815B8189B02C08BE0A9
:1008500001C08AE08093000181E887B98FEF88B9F1
:100860008BE184B981E085B98EE38AB9579A87EF25
:100870008BB984B7877F84BF809160008861809343
:1008800060001092600080ED97E09093C103809328
:10089000C003109254041092530410920A0710924D
:1008A00009071092520410925104109250041092B1
:1008B0004F04809100018A3011F4289801C0289AD1
:1008C0000E94B10C0E9458080E942D160E94290E09
:1008D0000E9466150E94BD3978941092080683E440
:1008E0008093090687E080930A062091000187E63D
:1008F00090E09F938F9383E490E09F938F931F9258
:100900001F92822F6AE00E94753C892F99279F933E
:100910008F93822F0E94753C99279F938F938DEB25
:1009200091E09F938F931F920E94380A8CE991E087
:100930009F938F931F920E94380A299AA1E0B0E0FA
:100940000E94223D802D2DB73EB7205F3F4F2DBF27
:10095000843409F43FC08DE691E09F938F931F92FA
:100960000E94380A0E94642310E00F900F900F90AD
:10097000123049F40E94D22246E461E377E082E03B
:100980000E94F10302C0133051F40E94412246E458
:1009900061E377E083E00E94F10314E002C01430C9
:1009A00010F00E94D22246E461E377E0812F0E949A
:1009B000F1031F5F1630E0F283E022E030E0D9015E
:1009C000082E0E942F3D84E421503040D901082E8A
:1009D0000E942F3DC4E0D0E0DE010E94223D802D28
:1009E000853050F084E591E09F938F931F920E9491
:1009F000380A0F900F900F902297DE010E94223D3F
:100A0000802D863028F082E0DE01082E0E942F3DE6
:100A100046E461E377E00E940B04DE010E94223D80
:100A2000802D863028F082E0DE01082E0E942F3DC6
:100A300099279F938F9389E391E09F938F931F92C0
:100A40000E94380A84EF91E00E94CF0CEC010F90D5
:100A50000F900F900F900F90CE010E94D80C88231A
:100A6000D9F3E0913307FF27EE0FFF1FEB5FF84F3D
:100A70008081918185369105C4F0E0913407FF278C
:100A8000EE0FFF1FEB5FF84F808191818536910556
:100A900064F084E291E09F938F931F920E94380A42
:100AA0000E94F1380F900F900F908091390780FFCE
:100AB00020C087E091E09F938F931F920E94380A95
:100AC00088EE93E00E94CF0CEC010E9495100F90ED
:100AD0000F900F90CE010E94D80C8823D9F382E0AA
:100AE00091E09F938F931F920E94380A0F900F906E
:100AF0000F900E94D320809100018A3011F4289831
:100B000001C0289A80ED97E09093C1038093C003C1
:100B100088EE93E0909303068093020685E5809328
:100B2000FD0584EF90E09F938F931F920E94380AF7
:100B3000809139070F900F900F9082FF03C088EECD
:100B400090E002C080EE90E09F938F931F920E94EE
:100B5000380A0F900F900F908CED90E09F938F9339
:100B60001F920E94380A0E94D91088E893E190935E
:100B70008603809385030F900F900F908091BF03A1
:100B8000882309F462C01092BF030E94F5230E94DB
:100B90008C20209100012A3011F4289801C0289A55
:100BA00080910301882321F081508093030110C0BC
:100BB0001092B2031092B30310926F0410926E045D
:100BC00010927104109270041092730410927204C7
:100BD00080914E04882329F080914E0481508093A7
:100BE0004E048091850390918603892B01F585E061
:100BF00090E090938603809385030E94071680916E
:100C00000403909105038F5F9F4FF9F48091550481
:100C10008823D9F080E197E29093C1038093C003C9
:100C200080E890E090930503809304030EC08091C8
:100C300085039091860301979093860380938503A3
:100C40002A3011F4289801C0289A0E9473080E9443
:100C50000309CE010E94D80C882309F48FCF20917C
:100C6000080330910903809149079927281739070C
:100C70009CF480910403909105038F5F9F4F61F472
:100C800080E797E19093C1038093C00380E093E0F5
:100C9000909305038093040384E690E00E94CF0CB8
:100CA000EC016CCF1F920F920FB60F9211248F930D
:100CB0009F93EF93FF93809101018823E1F480914A
:100CC000BB039091BC0301969093BC038093BB033C
:100CD000FC01E153FB4FE081ED3019F086399105BD
:100CE00039F41092BC031092BB0381E080930101A0
:100CF000E093C60004C01092BC031092BB03FF91A6
:100D0000EF919F918F910F900FBE0F901F901895AC
:100D10001F920F920FB60F9211242F933F934F9370
:100D20008F939F93AF93BF93CF93DF93EF93FF93F3
:100D30008091C6008093A6034091B603463910F017
:100D40001092B5038091A6038D3009F05CC08091AC
:100D5000B503823009F057C01092B503A42FBB270A
:100D6000FD01E05FF94F3081ED01CF5ED94F288161
:100D70008091B9039091BA03831B9109821B910959
:100D80009F709093BA038093B9039C0196E03695C7
:100D900027959A95E1F7235C2093B803982F9F73CA
:100DA000935C9093B7038081281729F48881981762
:100DB00011F491E006C08091A9038F5F8093A9038D
:100DC00090E08091A703882309F064C0992309F477
:100DD00061C081E08093A7034093AA03AE5EB94F40
:100DE0008DE08C9380911406823509F053C088E120
:100DF00090E02CE00FB6F894A895809360000FBEA9
:100E00002093600047C08091B5038130D9F08130D4
:100E100018F08230E9F530C08091A603833239F4AE
:100E20008091A703882319F481E08093B503809112
:100E3000A6038093120681E08093B6038091A603F7
:100E4000992715C082E08093B503E42FFF27809196
:100E5000A603EE5EF94F80834F5F4093B603209167
:100E6000A6038091B9039091BA03820F911D9093CC
:100E7000BA038093B9030EC0E42FFF278091A60325
:100E8000EE5EF94F8083463938F31092B503E7CF11
:100E90001092B503FF91EF91DF91CF91BF91AF9188
:100EA0009F918F914F913F912F910F900FBE0F9077
:100EB0001F901895DC0120E030E040E050E0EFECBE
:100EC000F4E005C08191280F311D4F5F5F4F4A1735
:100ED0005B07C1F73F70C90136E0969587953A9553
:100EE000E1F7835CFD01E153FB4F808311962F7383
:100EF000235CFD01E153FB4F2083A053BB4F8DE0EA
:100F00008C93109201018091CF048093C6000895C4
:100F1000EF92FF920F931F93CF93DF937A01722F7B
:100F200093E29093CF046093D0048093D10403E0C4
:100F300010E060E0A2EDB4E046C0F701E60FF11D5D
:100F400090816F5F715019F4E0E040E00FC0F7014D
:100F5000E60FF11D40816F5F715011F4E0E006C0B3
:100F6000F701E60FF11DE0816F5F7150892F8695C3
:100F70008695835C8C935527892F99278370907071
:100F800024E0880F991F2A95E1F79A0194E036959D
:100F900027959A95E1F7822B835CED0189834F7049
:100FA0005070440F551F440F551F8E2F8295869504
:100FB00086958370842B835C8A83EF73E35CEB8379
:100FC0000C5F1F4F1496772309F0B7CFC8010E941A
:100FD0005A07E6E0CDB7DEB70C940D3D1F93CF93D3
:100FE000DF93EC0170E0A22FBB27129748C0E42FDB
:100FF000FF27EE5EF94F30814F5FE42FFF27EE5E53
:10100000F94F50814F5FE42FFF27EE5EF94F1081BB
:101010004F5FE42FFF27EE5EF94F20814F5F842F53
:101020009927A817B90774F15D53FE01E70FF11D69
:101030003D53330F330F852F82958F70382B3083BC
:10104000613001F1912F9D537F5FFE01E70FF11D8C
:1010500071505295507F892F86958695582B5083D5
:1010600063506F3F79F07E5FFE01E70FF11D9295AF
:10107000990F990F907C2D53922B90837F5F66235D
:1010800009F0B5CFDF91CF911F9108951F93182FCD
:101090008A3019F48DE00E9446088091C00085FFD7
:1010A000FCCF1093C60080E090E01F910895089552
:1010B000E1ECF0E088E18083A0ECB0E08C9182600C
:1010C0008C938081806880838081806480838AE2C1
:1010D0008093C40088EC90E00E94CF0C9093FC05B4
:1010E0008093FB05089580910101882309F48AC04B
:1010F0008091A203882371F080910101882351F02F
:101100002BE04DEF55E06091CE0487E40E94880704
:101110001092A2038091FB059091FC050E94D80CCF
:10112000882321F48091A4038823B1F080910101E8
:10113000882391F022E448EA56E06091CE0484E4EA
:101140000E9488071092A40384EF91E00E94CF0CC4
:101150009093FC058093FB05609102016F3F89F03D
:10116000462F552734E0440F551F3A95E1F74C5F61
:101170005E4F605D20E181E40E9488078FEF8093DD
:1011800002018091A303882359F1809101018823F2
:1011900039F10E94E2101092A3033091AC03932F17
:1011A0009F5F9093AC03943021F08091AD0388232E
:1011B00059F026E145E057E060E084E30E948807AB
:1011C0008FEF8093AC030CC044E1949FA0011124E5
:1011D000465E5C4F24E160E0832F8F5C0E948807AD
:1011E0008091A503882371F080910101882351F03B
:1011F0002AE048E056E06091CE0486E50E94880728
:101200001092A5030895A2E0B0E0E9E0F9E00C94A3
:10121000F43C8091A703882309F4CDC08FEF80931D
:101220000301809114069927AA27BB27FC01E156E8
:10123000F040E631F10508F0BCC0E85CFF4F0C94CB
:101240001C3D2091AA0343E062E0CE0101960E947A
:10125000EE07898180930201ACC02091AA0343E08C
:101260006BE08DEF95E00E94EE078091E603909190
:10127000FF05892B8093E60381E08093A40399C046
:101280002091AA0343E062E0CE0101960E94EE079E
:101290008091E6039981892B8093E6038A818F3FB1
:1012A00021F481E08093AD0302C01092AD0381E090
:1012B0008093A3037EC02091AA0343E064E08EEAFA
:1012C00093E006C02091AA0343E063E082EB93E041
:1012D0000E94EE076EC081E08093A5036AC081E0A2
:1012E0008093A20366C02091AA0343E062E0CE018E
:1012F00001960E94EE0789818F3F89F0863010F0B9
:1013000085E0898346E461E377E089810E940B04EC
:10131000898126E441E357E06091CE0408C0109132
:10132000CE040E94E20326E441E357E0612F855B8F
:101330000E9488073EC02091AA0343E066E481E34F
:1013400097E00E94EE078091140646E461E377E09F
:101350008B560E94F103809114068B56A2E0B0E0F8
:10136000082E0E942F3D60915C07772788279927D8
:1013700024EC39E040E050E00E94563C6093870343
:10138000709388038093890390938A0360915D072B
:101390007727882799270E94563C60938B03709388
:1013A0008C0380938D0390938E030E94E2030E942E
:1013B0002C221092A703E3E0CE5F0C94103D982FEF
:1013C0008091EA06813069F48091E503E82FFF27D8
:1013D000E65EFC4F90838F5F8093E50321E030E071
:1013E00005C0892F0E944608282F3327C901089578
:1013F0001F93182F04C080E30E94DF0911501116BB
:10140000D4F31F9108951F93182F04C080E20E9407
:10141000DF0911501116D4F31F9108950F931F93F4
:10142000CF93DF938C01EB0108C0F8010F5F1F4FD2
:10143000E4918E2F0E94DF0921972097B1F7DF9169
:10144000CF911F910F9108950F931F93CF93DF9327
:101450008C01EB0106C0F80181918F010E94DF0928
:1014600021972097C1F7DF91CF911F910F91089598
:10147000A3E3B0E0EEE3FAE00C94E53C29968FADEF
:1014800029978093EA06CE01855B9F4F9D838C83CD
:101490002B968EAD9FAD2B979FA78EA7222433242A
:1014A000210102C0130124010EA51FA502C00F5F78
:1014B0001F4FF801F490FF2019F0F5E2FF16B9F77D
:1014C000B8018EA59FA5681B790B11F00E940E0A2A
:1014D000FF2009F442C20F5F1F4F1FA70EA71982FA
:1014E000AC81BD811BAA1AAA9FEF99ABEEA5FFA5FF
:1014F000CF0101969FA78EA7B49095E7B91621F06A
:101500008B2D8062883789F4EBA9E0FF07C02D900E
:101510003D904D905C901397149607C08D919C91CF
:1015200011971C01442455241296F0E2BF1621F4B1
:1015300089818823D9F685C083E2B81609F483C06F
:101540009AE2B91621F0EDE2BE1669F408C0FD0179
:101550001296E081EAABE7FFC9CFE195EAABFBA9C0
:10156000F061FF7D72C08BE2B81609F46AC09EE29A
:10157000B916B1F52EA53FA52F5F3F4FEEA5FFA5EC
:1015800084918A3221F0B82E20E030E01BC0FD01AA
:1015900012964081518157FF02C04FEF5FEF49AB78
:1015A0003FA72EA7A3CFC90103E0880F991F0A9573
:1015B000E1F7220F331F280F391F2B0D311D205348
:1015C0003040B49031968B2D80538A3060F3FFA762
:1015D000EEA7A90137FF02C04FEF5FEF49AB8DCFF8
:1015E000F0E3BF1631F48BA984FD80CF80628BAB12
:1015F0007DCF8B2D81538930E8F420E030E0C901A4
:10160000F3E0880F991FFA95E1F7220F331F280F97
:10161000391F2B0D311D20533040EEA5FFA5CF0102
:1016200001969FA78EA7B4908B2D80538A3038F3F4
:101630002AAB63CF98E6B91651F4EBA9E460EBABA3
:1016400055CFB98253CFFBA9F860FBAB4FCF8CE6E7
:10165000B81621F49BA991609BAB48CFBD83AC83A6
:10166000E3E6BE1639F41296BD83AC8312978C91D3
:101670008E8318C1F4E4BF1639F084E6B81639F049
:1016800099E6B91659F503C0EBA9E160EBABFBA9EC
:10169000F0FF08C01496BD83AC835E904E903E90E0
:1016A0002E900AC01296BD83AC839E918E911C0130
:1016B000442437FC4094542C57FC03C08AE088AB88
:1016C00092C05094409430942094211C311C411CB1
:1016D000511C8DE289839AE098AB85C0EFE4BE1679
:1016E00029F0FFE6BF1639F488E061C09BA991603C
:1016F0009BABE8E056C0F0E7BF1671F41296BD83CD
:10170000AC839E918E911C01442455248BA9806446
:101710008BAB78E7B72E5EC0E3E7BE16D9F512961D
:10172000BD83AC83DE90CE90C114D10489F488E2ED
:101730008E838EE68F8385E788878CE689878A8704
:1017400089E28B871C8666E0C62ED12CCC0EDD1E6E
:10175000F9A9F7FD13C04F2F552747FD509560E0BD
:1017600070E0C6010E94E13A009711F419A90DC07A
:101770008C1919A981174CF4182F07C0F601019094
:101780000020E9F731971E2F1C19198242013101FF
:1017900040E094C085E5B81631F095E7B91649F4F4
:1017A000EAE0E8AB1FC0FBA9F160FBAB8AE088ABC5
:1017B00019C098E5B91621F0E8E7BE1609F06EC029
:1017C000FBA9F3FD02C080E1F2CF211431044104F2
:1017D000510419F490E198AB05C0EBA9E064EBABC0
:1017E000F0E1F8AB198289A987FD03C09BA99F7D11
:1017F0009BAB211431044104510461F4E9A9EE23A7
:1018000049F46624772443015EE2C52ED12CCC0E28
:10181000DD1E3EC04EE2C42ED12CCC0EDD1EF8A93A
:10182000EF2EFF2400271127C201B101A801970163
:101830000E94A83C6A3020F430E3A32EA60E08C014
:1018400027E5A22EA60E88E5B81611F49FEDA92271
:10185000F601A2926F01C201B101A80197010E9495
:10186000A83C39014A012E143F044006510618F0E5
:1018700019012A01D9CFF8A9F83051F48BA983FFB7
:1018800007C090E3A91621F080E3F60182936F016F
:10189000CE018C19182F125D49A910C0BB2009F484
:1018A0005CC0BE8219824201310100E096E0C92E7F
:1018B000D12CCC0EDD1E11E021E005C0212F042F1C
:1018C000011B07FD00E08981882319F0812F8F5FBC
:1018D00007C09BA996FD02C0812F02C0822F8E5F98
:1018E000A82EA00EEBA9EE2EFF2480E3482E512C4B
:1018F0004E205F204114510421F48AA98A190E94C4
:10190000030A8981882329F061E070E0CE01019605
:1019100009C0E6FE09C080E38A83BB8262E070E012
:10192000CE0102960E94240AF0E24F16510421F4DF
:101930008AA98A190E94F809802F0E94F809612F4C
:10194000772767FD7095C6010E94240AE4FEAACDA0
:101950008AA98A190E94030AA5CDE2E1CD5C0C9404
:10196000013D82E085BD83EA84BD17BC88E788BD60
:1019700096E096BD83EC8093B0009093B100E0E7D1
:10198000F0E0808182608083EEE6F0E0808181601B
:1019900080838AE08093B3001092B2000895209172
:1019A000BD033091BE032F5F3F4F820F931F0895F9
:1019B0002091BD033091BE03821B930B892F992781
:1019C00086958074992708951F920F920FB60F92F3
:1019D0001124EF92FF920F931F932F933F934F93F6
:1019E0005F936F937F938F939F93AF93BF93CF93A7
:1019F000DF93EF93FF93809106038150809306035A
:101A00008F3F09F069C083E88093B00080919C0308
:101A1000C82FDD27D093C303C093C203809166070C
:101A2000E090530720910104309102044091030497
:101A30005091040480FF18C0FF2400271127CA0119
:101A4000B90120E830E040E050E00E94CA3CC80103
:101A5000B7010E94563C20E032E040E050E00E9496
:101A6000CA3CC20FD31F17C0FF2400271127CA0189
:101A7000B90120E830E040E050E00E94CA3CC801D3
:101A8000B7010E94563C20E032E040E050E00E9466
:101A9000CA3CC21BD30BD093C303C093C203209193
:101AA000C2033091C303809154079927281739073F
:101AB00034F08091550799278217930724F4909367
:101AC000C3038093C2038091C2038093B3008091CB
:101AD00056078093060304C083E08093B0005F98AC
:101AE000FF91EF91DF91CF91BF91AF919F918F9136
:101AF0007F916F915F914F913F912F911F910F9126
:101B0000FF90EF900F900FBE0F901F9018951F92AF
:101B10000F920FB60F9211242F933F934F935F9321
:101B20006F937F938F939F93AF93BF93EF93FF93A5
:101B30008091C40381508093C4038F3FB9F48AE03D
:101B40008093C403809107038F5F817080930703A4
:101B5000882319F481E08093BF038091BD039091A5
:101B6000BE0301969093BE038093BD038091C00392
:101B70009091C1030297B0F08091C0039091C1038E
:101B800001979093C1038093C0038091C00390910B
:101B9000C103209104033091050382239323892BF1
:101BA000D1F406C08FEF9FEF909305038093040359
:101BB000809100018A3039F404C05A9A05C0479ACE
:101BC00003C05A9801C047988091390783FF08C025
:101BD0000E94BF3805C0809100018A3081F7EDCFA7
:101BE000FF91EF91BF91AF919F918F917F916F91F5
:101BF0005F914F913F912F910F900FBE0F901F90CB
:101C000018952091BD033091BE032F5F3F4F280FE1
:101C1000391F4FEE02C040937A008091BD0390912E
:101C2000BE03B901681B790B77FFF5CF08952091AA
:101C3000BD033091BE032F5F3F4F280F391F8091A6
:101C4000BD039091BE03A901481B590B57FFF7CF65
:101C5000089510927C008FEE80937A0008951F9271
:101C60000F920FB60F921124DF92EF92FF920F9313
:101C70001F932F933F934F935F936F937F938F9314
:101C80009F93AF93BF93CF93DF93EF93FF93109204
:101C90007A008091E103D82ED394D092E103E82F0B
:101CA000FF27EB30F10508F022C2E25BFF4F0C94F6
:101CB0001C3D80917800909179009093E00380938F
:101CC000DF0381E08093E2038091D9039091DA03EE
:101CD00001969093DA038093D903FFC18091780035
:101CE000909179009093DE038093DD0390C0809102
:101CF0007800909179009093DC038093DB0384E07B
:101D000070C140910803509109038091780090912F
:101D100079009A01220F331F240F351F63E070E012
:101D20000E94813C260F371F3695279536952795BB
:101D3000309309032093080386E053C18091FB038D
:101D40009091FC032091780030917900821B930BD5
:101D50009093EC068093EB068091EB069091EC0655
:101D60009093CC038093CB0387E03BC180917800B4
:101D7000909179002091F9033091FA03821B930B23
:101D80009093F7068093F6068091F6069091F706F9
:101D90009093CE038093CD031092E2039EC1809175
:101DA00000012091DF033091E0038A3049F48091F3
:101DB000780090917900820F931F9695879506C0C1
:101DC0008091780090917900820F931F9093CA03BD
:101DD0008093C90381E005C1809100012091DD035A
:101DE0003091DE038A3049F4809178009091790037
:101DF000820F931F9695879506C0809178009091E9
:101E00007900820F931F9093C8038093C70382E0E9
:101E1000E8C0809100012091DB033091DC038A301F
:101E200049F48091780090917900820F931F9695E4
:101E3000879506C08091780090917900820F931F5A
:101E40009093C6038093C50385E0CBC06091780072
:101E500070917900E090FD03F090FE030091FF0384
:101E600010910004882777FD8095982F0E94943B5D
:101E7000A80197010E94EE3A0E94773B7093D0032D
:101E80006093CF032091CF033091D003E091EB0614
:101E9000F091EC068091F6069091F70697FF03C04B
:101EA000909581959F4F64E070E00E94953CEB0116
:101EB000CF01F7FF03C0909581959F4F64E070E0DC
:101EC0000E94953C260F371F2C0F3D1F3093D003E7
:101ED0002093CF038091CF039091D003029704F118
:101EE0006091FD037091FE038091FF0390910004C7
:101EF00020E030E048E454E40E949E3B88230CF04C
:101F00003CC06091FD037091FE038091FF039091AE
:101F100000042AE037ED43EA5CE30E94EF3A25C073
:101F20008091CF039091D0038F5F9F4F34F56091E4
:101F3000FD037091FE038091FF039091000420E067
:101F400030E046E154E40E94A13B1816B4F46091DD
:101F5000FD037091FE038091FF03909100042AE03D
:101F600037ED43EA5CE30E94EE3A6093FD03709321
:101F7000FE038093FF039093000481E08093D603D7
:101F800080917800909179009093EE068093ED0611
:101F9000E090CF03F090D0030027F7FC0095102FBE
:101FA0008091390490913A04A0913B04B0913C0493
:101FB000E80EF91E0A1F1B1FC801B70120E034E01C
:101FC00040E050E00E94CA3CE21AF30A040B150BF1
:101FD000E0923904F0923A0400933B0410933C04DD
:101FE00083E08093E20379C08091FB069091FC0628
:101FF0002091780030917900820F931F9093FC0616
:102000008093FB068091F3068F5F8093F3068091A7
:10201000F306853008F46BC08091780090917900C8
:1020200090930F0380930E031092F3068091EF06B6
:102030009091F0062091FB063091FC06821B930BD9
:102040002091560430915704821B930B9093D80330
:102050008093D7036091FB067091FC06E0900A0321
:10206000F0900B0300910C0310910D03882777FD6E
:102070008095982FA8019701220F331F441F551FE9
:102080002E0D3F1D401F511F620F731F841F951F90
:1020900024E030E040E050E00E94CA3C20930A0374
:1020A00030930B0340930C0350930D032091EF06E4
:1020B0003091F00680910A0390910B03A0910C03DC
:1020C000B0910D03281B390B30935704209356040D
:1020D0001092FC061092FB060AC08091E2038093E6
:1020E0007C00DD2051F08FEE80937A0006C01092C4
:1020F000E2031092E10310927C00FF91EF91DF91D7
:10210000CF91BF91AF919F918F917F916F915F918F
:102110004F913F912F911F910F91FF90EF90DF9082
:102120000F900FBE0F901F901895CF93DF93A3E0F1
:10213000B0E00E94223D802DC82FDD27C531D1059A
:1021400008F02A97C7BD84E690E00E94010E8091B6
:102150000E0390910F0382559340D0F4C0E0D0E07D
:1021600017C0C7BD82E390E00E94010E81EF91E0AD
:102170009F938F931F920E94380A80910E03909133
:102180000F030F900F900F908458934020F02196EA
:10219000CA3FD10530F3A3E0B0E00C2E0E942F3DE2
:1021A000C093F8068CE291E00E94010EDF91CF917E
:1021B0000895EAE1F3E080E2819393E0EA36F907DB
:1021C000D9F708951F938091E603282F3327C9017B
:1021D00081709070682F8823A9F08091E70388238D
:1021E00011F0815002C080916A038093E703EAE115
:1021F000F3E080E2819393E0EA36F907D9F78FEFB5
:102200008093AC03A9014270507021FF10C08091EF
:10221000E7038F5F8093E703EAE1F3E080E28193D5
:1022200093E0EA36F907D9F78FEF8093AC03662382
:1022300021F0452B11F01092E70381E18093E50333
:102240008091E70399279F938F9386E095E09F9372
:102250008F9381E08F930E94380A8091E7030F905B
:102260000F900F900F900F90E82FFF27ED30F105A2
:1022700008F023C4E75AFF4F0C941C3D1092E5036D
:1022800084EF94E09F938F9311E01F930E94380A8C
:1022900084E18093E5032091000187E690E09F931D
:1022A0008F9383E490E09F938F931F921F92822FCE
:1022B0006AE00E94753C892F99279F938F93822F04
:1022C0000E94753C99279F938F938FED94E09F9385
:1022D0008F931F930E94380A88E28093E5030E943F
:1022E000E20399279F938F9382ED94E09F938F93BE
:1022F0001F930E94380A8CE38093E50382EC94E0FC
:102300009F938F931F930E94380A88C28091390748
:1023100080FF44C01092E5038091560490915704C9
:102320009F938F9383EB94E09F938F9311E01F9380
:102330000E94380A84E18093E503809158049091CB
:1023400059049F938F9384EA94E09F938F931F93F4
:102350000E94380A88E28093E50380910E039091F1
:102360000F039F938F9385E994E09F938F931F931F
:102370000E94380A8CE38093E5038091F806992740
:102380009F938F9386E894E09F938F931F930E946F
:10239000380A8DB79EB744968DBF94C384E180936D
:1023A000E5038FE794E09F938F9311E01F930E94C2
:1023B000380A88E28093E50381E794E09F938F9346
:1023C0001F930E94380A8DB79EB70696E5CF1092EC
:1023D000E50387E694E09F938F9311E01F930E949B
:1023E000380A84E18093E50360910104709102044E
:1023F000809103049091040420E034E040E050E038
:102400000E94CA3C5F934F933F932F9388E594E0DB
:102410009F938F931F930E94380A88E28093E5036D
:102420006091090470910A0480910B0490910C044E
:1024300020E034E040E050E00E94CA3C5F934F93BC
:102440003F932F9389E494E09F938F931F930E946F
:10245000380A8CE38093E50380913D0490913E041B
:102460009F938F938AE394E09F938F931F930E948F
:10247000380A8DB79EB746968FCF1092E5038091AC
:10248000090790910A0720910707309108079F9349
:102490008F933F932F938AE294E09F938F9311E061
:1024A0001F930E94380A84E18093E50380910D0711
:1024B00090910E0720910B0730910C079F938F93FB
:1024C0003F932F938AE194E09F938F931F930E94F1
:1024D000380A88E28093E5038091110790911207F2
:1024E00020910F07309110079F938F933F932F9365
:1024F0008AE094E09F938F931F930E94380A8CE3A5
:102500008093E5038091150790911607209113079A
:10251000309114079F938F933F932F938AEF93E00B
:102520007BC01092E503E0913207FF27EE0FFF1FFB
:10253000EB5FF84F20813181E0913107FF27EE0FEB
:10254000FF1FEB5FF84F808191813F932F939F9303
:102550008F938AEE93E09F938F9311E01F930E94D5
:10256000380A84E18093E503E0913407FF27EE0FFA
:10257000FF1FEB5FF84F20813181E0913307FF2788
:10258000EE0FFF1FEB5FF84F808191813F932F93F8
:102590009F938F938AED93E09F938F931F930E9455
:1025A000380A88E28093E503E0913607FF27EE0FB3
:1025B000FF1FEB5FF84F20813181E0913507FF2746
:1025C000EE0FFF1FEB5FF84F808191813F932F93B8
:1025D0009F938F938AEC93E09F938F931F930E9416
:1025E000380A8CE38093E503E0913807FF27EE0F6C
:1025F000FF1FEB5FF84F20813181E0913707FF2704
:10260000EE0FFF1FEB5FF84F808191813F932F9377
:102610009F938F938AEB93E09F938F931F930E94D6
:10262000380A8DB79EB74C96B7CE1092E5038CEA68
:1026300093E09F938F9311E01F930E94380A0F90AD
:102640000F900F9080910001E091EF03F091F00363
:102650008A30F1F584E18093E5038091C503909180
:10266000C603FF93EF938E1B9F0B9F938F938DE970
:1026700093E09F938F931F930E94380A88E2809380
:10268000E5032091F1033091F2038091C70390910B
:10269000C8033F932F93821B930B9F938F938EE8D6
:1026A00093E09F938F931F930E94380A8CE380934B
:1026B000E5038091F3039091F4039F938F938091AE
:1026C000A0079091A1079F938F938FE793E04BC052
:1026D00084E18093E5032091C5033091C603CF01C7
:1026E00062E070E00E94953C7F936F932E1B3F0B3E
:1026F0003F932F9380E793E09F938F931F930E94C4
:10270000380A88E28093E503E091F103F091F20347
:102710002091C7033091C803CF0162E070E00E94AE
:10272000953C7F936F932E1B3F0B3F932F9381E636
:1027300093E09F938F931F930E94380A8CE38093BA
:10274000E5038091F3039091F40362E070E00E944E
:10275000953C7F936F938091A0079091A1079F93E1
:102760008F9382E593E09F938F931F930E94380A83
:102770008DB79EB7459610CE1092E50385E493E0A1
:102780009F938F9311E01F930E94380A84E18093F6
:10279000E5038091F9039091FA032091CD033091E4
:1027A000CE039F938F933F932F9386E393E09F9362
:1027B0008F931F930E94380A88E28093E5038091EB
:1027C000FB039091FC032091CB033091CC039F93AA
:1027D0008F933F932F9387E293E09F938F931F9361
:1027E0000E94380A8CE38093E5036091FD037091A9
:1027F000FE038091FF03909100040E94773B7F933A
:102800006F9380918807909189079F938F9388E1B8
:1028100093E09F938F931F930E94380A8DB79EB7C2
:102820004896BACD84E18093E503809108039091A6
:1028300009039F938F9389E093E09F938F9311E017
:102840001F930E94380A88E28093E50380914E042A
:1028500099279F938F938AEF92E09F938F931F9373
:102860000E94380A8DB79EB70A9696CD1092E5035E
:102870008BEE92E09F938F9311E01F930E94380A92
:1028800084E18093E50380914104909142049F93F9
:102890008F938CED92E09F938F931F930E94380A41
:1028A00088E28093E50380913D0490913E049F93DC
:1028B0008F938DEC92E09F938F931F930E94380A21
:1028C0008CE38093E50380913F04909140049F93B3
:1028D0008F938EEB92E0E8C01092E503809146045E
:1028E000909147049F938F9382EB92E09F938F93F5
:1028F00011E01F930E94380A84E18093E5038091E0
:102900004804909149049F938F9386EA92E09F93A5
:102910008F931F930E94380A88E28093E503809189
:102920004A0490914B049F938F938AE992E09F937E
:102930008F931F930E94380A8CE38093E503809164
:102940004C0490914D049F938F938EE892E01CCDA0
:102950001092E50386E892E09F938F9311E01F9316
:102960000E94380A84E18093E50380919C039927B3
:102970009F938F9388E792E09F938F931F930E947A
:10298000380A88E28093E5038091C2039091C303E3
:102990009F938F938AE692E09F938F931F930E9459
:1029A000380A8CE38093E5038091550799279F931C
:1029B0008F938091540799279F938F938CE592E092
:1029C0009F938F931F930E94380AE3CC1092E503E4
:1029D00084E592E09F938F9311E01F930E94380A41
:1029E00084E18093E5038091AE07992787FD909558
:1029F0009F938F9385E492E09F938F931F930E9400
:102A0000380A88E28093E5038091AF07992787FD14
:102A100090959F938F9386E392E09F938F931F935C
:102A20000E94380A8CE38093E5038091B0079927D0
:102A300087FD90959F938F9387E292E035C0109227
:102A4000E5038DE192E09F938F9311E01F930E9425
:102A5000380A84E18093E5038091B1079091B20731
:102A60009F938F938FE092E09F938F931F930E9489
:102A7000380A88E28093E5038091B3079091B40708
:102A80009F938F9381E092E09F938F931F930E9477
:102A9000380A8CE38093E5038091B5079091B607DF
:102AA0009F938F9383EF91E09F938F931F930E9447
:102AB000380A8DB79EB742966FCC815080936A03D7
:102AC0001092E7031092E6031F9108951092B90047
:102AD0008AE28093B800089585EA8093BC0080E084
:102AE00090E0089584E98093BC0008951092B900A5
:102AF0008093BB0085E88093BC0080E090E008955F
:102B00001F920F920FB60F9211248F939F93EF9302
:102B1000FF938091E8038F5F8093E8038150E82F53
:102B2000FF27E830F10508F064C0EA59FF4F0C9424
:102B30001C3D8091E903880F8E5A09C08091E903FA
:102B40008F5F8093E903815027C080917B071092AB
:102B5000B9008093BB0085E88093BC004AC084E93B
:102B60008093BC008091E903843018F41092E8034C
:102B700002C01092E90385EAEFCF8091EA03880F43
:102B80008D5AE5CF8091BB00E091EA03FF27E35027
:102B9000F94F80838091EA03813039F08130A8F2C7
:102BA000823031F0833029F506C080918007CFCF85
:102BB00080919807CCCF80919A07C9CF8091EA0382
:102BC0009091BB00E82FFF27E350F94F94838F5F6C
:102BD0008093EA03843010F01092EA0384E9809332
:102BE000BC008AE090E09093860380938503109266
:102BF000E8038091BC0080688093BC00FF91EF9156
:102C00009F918F910F900FBE0F901F9018954CEBD6
:102C100050E084E9DA018C931092E8032BEB30E06A
:102C2000F90180811092E90380E88C931092BD0035
:102C30001092BA001082E9EBF0E01082A8EBB0E04D
:102C40001C9210828AE28C9385EADA018C931082BE
:102C5000F901108285E88C93089583EC80938100BC
:102C6000EFE6F0E08081806280831092F40310929E
:102C7000F3031092F2031092F1031092F0031092FA
:102C8000EF0308951F920F920FB60F9211240F9326
:102C90001F932F933F934F935F936F937F938F93E4
:102CA0009F93AF93BF93CF93DF93EF93FF932091C5
:102CB0008600309187008091ED039091EE03281BF0
:102CC000390B80918600909187009093EE0380935A
:102CD000ED03C9018D549440C091EB03D091EC03F6
:102CE000835F9A4158F4249714F010926B0381E0AB
:102CF00090E09093EC038093EB035CC0CA30D10565
:102D00000CF058C0C9018B5F9040845B914008F083
:102D100040C0A901425D5140FE01EE0FFF1FEB5F75
:102D2000F84F80819181FA01E81BF90BCF01F7FF81
:102D300003C0909581959F4F06974CF480914E0467
:102D4000883C28F480914E04865F80934E04FE01F7
:102D5000EE0FFF1F8F010B5F184FD8012D913C9193
:102D6000C901880F991F820F931F840F951F64E07C
:102D700070E00E94953CD8018D919C9111979B0128
:102D8000281B390BE55EF84F3183208311967C9325
:102D90006E93FE013196F093EC03E093EB03E53084
:102DA000F10511F45D9A05C05D98369711F45C9AAF
:102DB00001C05C98FF91EF91DF91CF91BF91AF91EE
:102DC0009F918F917F916F915F914F913F912F9143
:102DD0001F910F910F900FBE0F901F901895A2E1B9
:102DE000B0E0E5EFF6E10C94E53C8091C9039091E9
:102DF000CA034090F3035090F403481A590A5092C2
:102E0000A1074092A0078091C7039091C803988BB7
:102E10008F87A091F103B091F203BA8BA98BE09157
:102E2000C503F091C603FE87ED878091EF03909173
:102E3000F0039C878B876091CD037091CE03E09067
:102E40009D07F0909E070027F7FC0095102F88271C
:102E500077FD8095982F2CE030E040E050E00E9414
:102E6000563CE60EF71E081F191FC801B70122E0E5
:102E700030E040E050E00E94CA3C30939E0720932F
:102E80009D076091CB037091CC03E090A707F09071
:102E9000A8070027F7FC0095102F882777FD80955D
:102EA000982F2CE030E040E050E00E94563CE60EC7
:102EB000F71E081F191FC801B70122E030E040E0EB
:102EC00050E00E94CA3C3093A8072093A7072091A6
:102ED000CF033091D00360918807709189078827CC
:102EE00077FD8095982F442737FD4095542F620F2A
:102EF000731F841F951F22E030E040E050E00E94E5
:102F0000CA3C30938907209388072091CD033091E4
:102F1000CE03C901880F991F820F931F880F991F35
:102F2000880F991FAA2797FDA095BA2F2091110409
:102F3000309112044091130450911404280F391F4A
:102F40004A1F5B1F20931104309312044093130413
:102F5000509314042091CB033091CC03C901880F06
:102F6000991F820F931F880F991F880F991FAA27F7
:102F700097FDA095BA2F2091150430911604409129
:102F8000170450911804280F391F4A1F5B1F209304
:102F90001504309316044093170450931804E090DE
:102FA000ED06F090EE06A090FD03B090FE03C090F9
:102FB000FF03D09000046091190470911A0480916D
:102FC0001B0490911C040E94943B3B014C01002780
:102FD000F7FC0095102FC801B7010E94943BA60191
:102FE00095010E94EE3A9B01AC01C401B3010E941D
:102FF000EF3A0E94773B6093190470931A04809310
:103000001B0490931C045201CC24B7FCC094DC2C0C
:1030100060903104709032048090330490903404B6
:103020006A0C7B1C8C1C9D1C6092310470923204D3
:103030008092330490923404809135049091360448
:10304000A0913704B09138048A0D9B1DAC1DBD1DA5
:103050008093350490933604A0933704B0933804DA
:1030600090915E049A87992309F05FC080915F0474
:10307000882309F05AC08091390786FF56C0E09036
:103080006C04FF2400271127609121047091220411
:10309000809123049091240420E030E140E050E04E
:1030A0000E94CA3CCA01B901A80197010E94563C7E
:1030B0009B01AC01C601B5010E94563C20E038E0FE
:1030C00040E050E00E94CA3C2093B5043093B6041F
:1030D0004093B7045093B8046091290470912A0476
:1030E00080912B0490912C0420E030E140E050E0EE
:1030F0000E94CA3CCA01B901A80197010E94563C2E
:103100009B01AC01C601B5010E94563C20E038E0AD
:1031100040E050E00E94CA3C2093B1043093B204D6
:103120004093B3045093B40410C01092B1041092B1
:10313000B2041092B3041092B4041092B504109229
:10314000B6041092B7041092B8048091B50490911F
:10315000B604A091B704B091B8048E839F83A8876A
:10316000B9878091B1049091B204A091B304B09159
:10317000B4048A839B83AC83BD8380916D04282E25
:10318000332444245524EF84F888A989BA89EA1A9B
:10319000FB0AEE81FF81EE0EFF1E6A817B818C812E
:1031A0009D81A20191010E94563C20E032E040E066
:1031B00050E00E94CA3CE20EF31EF0927A07E092C1
:1031C00079079701442737FD4095542F80912D04AE
:1031D00090912E04A0912F04B0913004820F931F80
:1031E000A41FB51F80932D0490932E04A0932F0449
:1031F000B093300480915A0490915B04E81AF90A64
:103200000027F7FC0095102F8091290490912A0443
:10321000A0912B04B0912C04E80EF91E0A1F1B1F6D
:10322000E0922904F0922A0400932B0410932C04BA
:10323000A0908B03B0908C03C0908D03D0908E0330
:10324000AE14BF04C006D106C4F480E197E2A0E04A
:10325000B0E08A199B09AC09BD09809329049093B9
:103260002A04A0932B04B0932C0480932D049093F4
:103270002E04A0932F04B093300422273327A901F2
:103280002A193B094C095D098091290490912A046F
:10329000A0912B04B0912C0482179307A407B507C3
:1032A000B4F4D601C50180519742A040B04080934C
:1032B000290490932A04A0932B04B0932C048093A8
:1032C0002D0490932E04A0932F04B093300480918A
:1032D000C7039091C8030F9734F488E19CEF909353
:1032E0007A07809379078091C7039091C803079765
:1032F00034F480E398EF90937A0780937907F09104
:103300000001F983FA30A9F48091C7039091C803B2
:10331000835F934034F088EE93E090937A07809334
:1033200079078091C7039091C8038A5F9340DCF0CE
:1033300014C08091C7039091C803855E974034F014
:1033400088EE93E090937A07809379078091C70382
:103350009091C803835F974034F080ED97E090939D
:103360007A0780937907ED84FE848B859C85E81A23
:10337000F90AAA81BB81EA1AFB0A6E817F818885DE
:103380009985A20191010E94563C20E032E040E084
:1033900050E00E94CA3CE21AF30AF0928207E092DF
:1033A00081079701442737FD4095542F80912504CC
:1033B00090912604A0912704B0912804820F931FB6
:1033C000A41FB51F8093250490932604A09327047F
:1033D000B093280480915C0490915D04E81AF90A86
:1033E0000027F7FC0095102F809121049091220472
:1033F000A0912304B0912404E80EF91E0A1F1B1F9C
:10340000E0922104F09222040093230410932404F8
:10341000A0908703B0908803C0908903D0908A035E
:10342000AE14BF04C006D106C4F480E197E2A0E068
:10343000B0E08A199B09AC09BD09809321049093DF
:103440002204A0932304B093240480932504909332
:103450002604A0932704B093280422273327A90128
:103460002A193B094C095D0980912104909122049D
:10347000A0912304B091240482179307A407B507F1
:10348000B4F4D601C50180519742A040B04080936A
:10349000210490932204A0932304B09324048093E6
:1034A000250490932604A0932704B09328048091C8
:1034B000C5039091C6030F9734F488E19CEF909375
:1034C0008207809381078091C5039091C603079777
:1034D00034F480E398EF9093820780938107B98159
:1034E000BA30A9F48091C5039091C603835F9340DD
:1034F00034F088EE93E09093820780938107809167
:10350000C5039091C6038A5F9340DCF014C080919C
:10351000C5039091C603855E974034F088EE93E032
:1035200090938207809381078091C5039091C60391
:10353000835F974034F080ED97E09093820780930B
:1035400081078FEE80937A0060921D0470921E04B2
:1035500080921F0490922004809121049091220473
:10356000A0912304B0912404809301049093020459
:10357000A0930304B09304048091290490912A0439
:10358000A0912B04B0912C048093090490930A0419
:10359000A0930B04B0930C04809125049091260411
:1035A000A0912704B0912804809305049093060409
:1035B000A0930704B093080480912D0490912E04E9
:1035C000A0912F04B091300480930D0490930E04C9
:1035D000A0930F04B09310048091390787FF3FC078
:1035E000BA85BB23E1F580915F048823C1F5209162
:1035F000810730918207293C310524F0C9018052AE
:10360000934007C0EFEF28333E076CF4C901805E9A
:103610009C4F220F331F220F331F280F391F309367
:103620008207209381072091790730917A07293CFE
:10363000310524F0C9018052934007C0FFEF2833C1
:103640003F076CF4C901805E9C4F220F331F220F8D
:10365000331F280F391F30937A0720937907209161
:1036600046043091470480913507E82FFF27EE0F7D
:10367000FF1FEB5FF84F8081918182599F4F281780
:1036800039071CF42F5F3F4F0CC080819181825914
:103690009F4F821793074CF42115310531F02150CB
:1036A00030403093470420934604209148043091E1
:1036B000490480913607E82FFF27EE0FFF1FEB5FCD
:1036C000F84F8081918182599F4F281739071CF448
:1036D0002F5F3F4F0CC08081918182599F4F82178D
:1036E00093074CF42115310531F0215030403093CF
:1036F00049042093480420914A0430914B0480915E
:103700003707E82FFF27EE0FFF1FEB5FF84F808191
:10371000918182599F4F281739071CF42F5F3F4F23
:103720000CC08081918182599F4F821793074CF47E
:103730002115310531F02150304030934B04209356
:103740004A0420914C0430914D0480913807E82FB1
:10375000FF27EE0FFF1FEB5FF84F808191818259A9
:103760009F4F281739071CF42F5F3F4F0CC08081F3
:10377000918182599F4F821793074CF4211531058F
:1037800031F02150304030934D0420934C0480910F
:1037900046049091470497FF05C010924704109289
:1037A00046040AC08F3F910539F034F08FEF90E066
:1037B0009093470480934604809148049091490473
:1037C00097FF05C010924904109248040AC08F3F29
:1037D000910539F034F08FEF90E090934904809395
:1037E000480480914A0490914B0497FF05C01092C1
:1037F0004B0410924A040AC08F3F910539F034F00F
:103800008FEF90E090934B0480934A0480914C0496
:1038100090914D0497FF05C010924D0410924C04F6
:103820000AC08F3F910539F034F08FEF90E090930C
:103830004D0480934C04E2E1CE5E0C94013D109265
:103840007A008091C5039091C6039093820780937C
:1038500081078091C7039091C80390937A07809362
:1038600079078091C9039091CA039093A10780932F
:10387000A0076091CD037091CE03882777FD8095D6
:10388000982F2CE030E040E050E00E94563C7093CE
:103890009E0760939D076091CB037091CC038827AE
:1038A00077FD8095982F0E94563C7093A8076093EF
:1038B000A7078091CF039091D003909389078093BD
:1038C00088078FEE80937A00209146043091470458
:1038D00080913507E82FFF27EE0FFF1FEB5FF84FB2
:1038E0008081918182599F4F281739071CF42F5FDF
:1038F0003F4F0CC08081918182599F4F821793075F
:103900004CF42115310531F02150304030934704FB
:103910002093460420914804309149048091360751
:10392000E82FFF27EE0FFF1FEB5FF84F808191819B
:1039300082599F4F281739071CF42F5F3F4F0CC047
:103940008081918182599F4F821793074CF42115F2
:10395000310531F021503040309349042093480420
:1039600020914A0430914B0480913707E82FFF27BC
:10397000EE0FFF1FEB5FF84F8081918182599F4FBF
:10398000281739071CF42F5F3F4F0CC080819181AD
:1039900082599F4F821793074CF42115310531F05E
:1039A0002150304030934B0420934A0420914C0422
:1039B00030914D0480913807E82FFF27EE0FFF1F4D
:1039C000EB5FF84F8081918182599F4F281739070B
:1039D0001CF42F5F3F4F0CC08081918182599F4F13
:1039E000821793074CF42115310531F021503040F6
:1039F00030934D0420934C048091460490914704E9
:103A000097FF05C010924704109246040AC08F3FEA
:103A1000910539F034F08FEF90E090934704809354
:103A20004604809148049091490497FF05C0109284
:103A30004904109248040AC08F3F910539F034F0D0
:103A40008FEF90E0909349048093480480914A045A
:103A500090914B0497FF05C010924B0410924A04BA
:103A60000AC08F3F910539F034F08FEF90E09093CA
:103A70004B0480934A0480914C0490914D0497FF2D
:103A800005C010924D0410924C040AC08F3F91055E
:103A900039F034F08FEF90E090934D0480934C0414
:103AA00060915C0777278827992724EC39E040E06C
:103AB00050E00E94563C6093870370938803809384
:103AC000890390938A0360938B0370938C03809394
:103AD0008D0390938E0308951F9380913C078B3F35
:103AE00098F08B3F19F4809146040EC08C3F19F476
:103AF0008091480409C08D3F19F480914A0404C0A4
:103B00008E3F21F480914C04809394038091940320
:103B1000882319F41092940304C08F3F11F480930A
:103B2000940380913B078B3F98F08B3F19F4809171
:103B300046040EC08C3F19F48091480409C08D3FA3
:103B400019F480914A0404C08E3F21F480914C0402
:103B50008093930380919303882319F41092930325
:103B600005C0843618F084E68093930380913D0766
:103B70008B3F98F08B3F19F4809146040EC08C3F28
:103B800019F48091480409C08D3F19F480914A04CA
:103B900004C08E3F21F480914C0480939503809162
:103BA0009503882319F41092950305C0843618F004
:103BB00084E68093950380913F078B3F98F08B3F7D
:103BC00019F4809146040EC08C3F19F4809148048A
:103BD00009C08D3F19F480914A0404C08E3F21F43E
:103BE00080914C048093960380919603882319F466
:103BF0001092960304C08F3F11F480939603809136
:103C000046078B3F98F08B3F19F4809146040EC015
:103C10008C3F19F48091480409C08D3F19F48091BC
:103C20004A0404C08E3F21F480914C048093970392
:103C300080919703882319F41092970304C08F3F53
:103C400011F480939703809147078B3F98F08B3F47
:103C500019F4809146040EC08C3F19F480914804F9
:103C600009C08D3F19F480914A0404C08E3F21F4AD
:103C700080914C0480939803809198038B3010F4CA
:103C80008AE002C08F3F11F4809398038091480727
:103C90008B3F98F08B3F19F4809146040EC08C3F07
:103CA00019F48091480409C08D3F19F480914A04A9
:103CB00004C08E3F21F480914C048093990380913D
:103CC0009903882319F41092990304C08F3F11F4CB
:103CD0008093990380914D078B3F98F08B3F19F4A7
:103CE000809146040EC08C3F19F48091480409C0AD
:103CF0008D3F19F480914A0404C08E3F21F48091D5
:103D00004C0480939B0380919B03882319F41092A9
:103D10009B0304C08F3F11F480939B0380914E0757
:103D20008B3F98F08B3F19F4809146040EC08C3F76
:103D300019F48091480409C08D3F19F480914A0418
:103D400004C08E3F21F480914C04809364048091E0
:103D50006404882319F41092640404C08F3F11F4A2
:103D60008093640480914F078B3F98F08B3F19F448
:103D7000809146040EC08C3F19F48091480409C01C
:103D80008D3F19F480914A0404C08E3F21F4809144
:103D90004C048093650480916504882319F4109283
:103DA000650404C08F3F11F480936504809150072F
:103DB0008B3F98F08B3F19F4809146040EC08C3FE6
:103DC00019F48091480409C08D3F19F480914A0488
:103DD00004C08E3F21F480914C048093660480914E
:103DE0006604882319F41092660404C08F3F11F40E
:103DF00080936604809151078B3F98F08B3F19F4B4
:103E0000809146040EC08C3F19F48091480409C08B
:103E10008D3F19F480914A0404C08E3F21F48091B3
:103E20004C048093670480916704882319F41092EE
:103E3000670404C08F3F11F4809367048091610789
:103E40008B3F98F08B3F19F4809146040EC08C3F55
:103E500019F48091480409C08D3F19F480914A04F7
:103E600004C08E3F21F480914C04809368048091BB
:103E70006804882319F41092680404C08F3F11F479
:103E800080936804809162078B3F98F08B3F19F410
:103E9000809146040EC08C3F19F48091480409C0FB
:103EA0008D3F19F480914A0404C08E3F21F4809123
:103EB0004C048093690480916904882319F410925A
:103EC000690404C08F3F11F48093690480916307F3
:103ED0008B3F98F08B3F19F4809146040EC08C3FC5
:103EE00019F48091480409C08D3F19F480914A0467
:103EF00004C08E3F21F480914C0480936A04809129
:103F00006A04882319F410926A0404C08F3F11F4E4
:103F100080936A04809164078B3F98F08B3F19F47B
:103F2000809146040EC08C3F19F48091480409C06A
:103F30008D3F19F480914A0404C08E3F21F4809192
:103F40004C0480936B0480916B04882319F41092C5
:103F50006B0404C08F3F11F480936B04809152076F
:103F60008B3F98F08B3F19F4809146040EC08C3F34
:103F700019F48091480409C08D3F19F480914A04D6
:103F800004C08E3F21F480914C0480939C03809167
:103F90009C03882319F410929C0304C08F3F11F4F2
:103FA00080939C03809157078B3F98F08B3F19F4C7
:103FB000809146040EC08C3F19F48091480409C0DA
:103FC0008D3F19F480914A0404C08E3F21F4809102
:103FD0004C0480939D0380919D03882319F41092D3
:103FE0009D0304C08F3F11F480939D0380915A0775
:103FF0008B3F98F08B3F19F4809146040EC08C3FA4
:1040000019F48091480409C08D3F19F480914A0445
:1040100004C08E3F21F480914C0480936C04809105
:104020006C04882319F410926C0404C08F3F11F4BF
:1040300080936C0480915B078B3F98F08B3F19F461
:10404000809146040EC08C3F19F48091480409C049
:104050008D3F19F480914A0404C08E3F21F4809171
:104060004C0480936D0480916D04882319F41092A0
:104070006D0404C08F3F11F480936D04809160073C
:104080008B3F98F08B3F19F4809146040EC08C3F13
:1040900019F48091480409C08D3F19F480914A04B5
:1040A00004C08E3F21F480914C0480939E03809144
:1040B0009E03882319F410929E0304C08F3F11F4CD
:1040C00080939E0310919B03612F772767FD709566
:1040D000872F972F0E94943B17FF06C020E030E007
:1040E00040E853E40E94EF3A27E137EB41ED58E313
:1040F0000E940E3C60938F03709390038093910312
:10410000909392038091440780939F078091430787
:10411000809383071F91089580915504882301F5AA
:104120001092800710927B071092980710929A07BE
:104130008091AE03882311F080937B078091AF03B9
:10414000882311F0809380078091B003882311F0B9
:1041500080939A078091B103882311F08093980788
:1041600080917B0799279093C3068093C206809124
:10417000800799279093C5068093C40680919A077B
:1041800099279093C7068093C60680919807992730
:104190009093C9068093C8061092E8031092E90331
:1041A0000E946C1508951092FA031092F903109270
:1041B000FC031092FB0380E090E0A0E0B0E080936D
:1041C000FD039093FE03A093FF03B09300041092AD
:1041D000F0031092EF031092F2031092F103109289
:1041E000F4031092F30310926C0410926D040E9479
:1041F0001F1C84E690E00E94010E0E941F1C80910B
:10420000390780FF10C080910E0390910F03875BE8
:10421000934038F480910E0390910F038E5E92408C
:1042200010F40E9495104091C5035091C60350931D
:10423000F0034093EF032091C7033091C8033093FC
:10424000F2032093F1038091C9039091CA039093E4
:10425000F4038093F3033093F6032093F503509314
:10426000F8034093F70344E050E0DA010E94223D56
:10427000802D853038F18091A7079091A80797FF8E
:1042800003C0909581959F4F6CE070E00E94953C33
:104290007093FC036093FB0380919D0790919E07B0
:1042A00097FF03C0909581959F4F6CE070E00E944E
:1042B000953C7093FA036093F9036091ED06709159
:1042C000EE0639C0DA010E94223D802D4F5F5F4F1C
:1042D000DA010E94223D202D9927982F8827820FEE
:1042E000911D9093FA038093F9034F5F5F4FDA01BA
:1042F0000E94223D802D4F5F5F4FDA010E94223DD8
:10430000202D9927982F8827820F911D9093FC03C9
:104310008093FB034F5F5F4FDA010E94223D602DC7
:104320004F5F5F4FDA010E94223D202D7727762FC5
:104330006627620F711D882777FD8095982F0E9450
:10434000943B6093FD037093FE038093FF0390936F
:10435000000410922104109222041092230410925F
:10436000240410922504109226041092270410921F
:1043700028041092290410922A0410922B041092FF
:104380002C0410922D0410922E0410922F041092DF
:1043900030041092310410923204109233041092BF
:1043A0003404109282071092810710927A071092BB
:1043B00079071092A1071092A00780910A039091AB
:1043C0000B03A0910C03B0910D039093F006809322
:1043D000EF061092D8031092D7031092390410926E
:1043E0003A0410923B0410923C0480913D04909159
:1043F0003E049093400480933F040E94ED3682E394
:1044000090E09093C1038093C00360915C0777278D
:104410008827992724EC39E040E050E00E94563C80
:1044200060938703709388038093890390938A0332
:1044300060915D077727882799270E94563C6093F3
:104440008B0370938C0380938D0390938E03109253
:10445000A00310929F0308951F93182F0EC0809100
:104460005504882361F484E690E09093C10380931F
:10447000C0038AEF90E00E94170E115080F71F9141
:10448000089581E08093310752E05093320743E072
:104490004093330774E07093340765E06093350709
:1044A00086E08093360787E08093370798E0909303
:1044B000380780EC809339078EE180933A078BEFC1
:1044C00080933C073AE030933D0722E320933B077B
:1044D00020933F0750933E074093400710924107B7
:1044E000909342078FE0809343078AEF80934407BD
:1044F0008AE18093450780E88093460788EC8093A3
:1045000047078FEA809348078EE58093490783E247
:1045100080934A0784E180934B0710924C073093B5
:104520004D0780E580934E0710924F071092500779
:104530001092510710926107109262071092630760
:104540001092640794E69093520788E28093530791
:10455000109266072093540786E98093550760936D
:104560005607209357078AE58093580720935907E9
:104570001092650790935A0730935B0790935C07FE
:1045800090935D0790935E0770935F072093600799
:10459000ABE6B7E0ECE6F3E08CE001900D928150E1
:1045A000E1F7089581E08093310792E0909332071C
:1045B00083E08093330744E04093340755E0509301
:1045C000350786E08093360787E08093370788E0D9
:1045D0008093380780E4809339078EE180933A070F
:1045E0008BEF80933C073AE030933D0722E3209322
:1045F0003B0720933F0790933E074093400710925C
:104600004107309342078FE0809343078AEF8093FE
:1046100044078AE18093450780E8809346078FEA44
:1046200080934707809348078EE58093490783E28C
:1046300080934A0784E180934B0710924C0780E2F5
:1046400080934D0780E580934E0710924F0710929C
:104650005007109251071092610710926207109252
:1046600063071092640794E69093520788E2809360
:104670005307109266072093540786E980935507E5
:1046800050935607209357078AE580935807209345
:1046900059071092650790935A0730935B079093E0
:1046A0005C0790935D0790935E0740935F078BE4F0
:1046B00080936007ABE6B7E0E6E7F3E08CE00190BB
:1046C0000D928150E1F7089581E08093310782E0F7
:1046D0008093320783E08093330734E030933407CC
:1046E00065E06093350786E08093360787E0809326
:1046F000370798E09093380780E4809339078EE17C
:1047000080933A078BEF80933C075AE050933D0724
:1047100022E320933B0720933F0730933E073093DB
:104720004007909341078EE0809342078FE080938B
:1047300043078AEF809344078AE18093450790E816
:104740009093460788E78093470746E940934807D8
:104750008EE58093490783E280934A0784E1809342
:104760004B0710924C0780E280934D0790934E07C1
:1047700010924F0710925007109251071092610744
:1047800010926207109263071092640794E6909368
:10479000520788E2809353071092660720935407CC
:1047A0004093550760935607209357078AE58093F7
:1047B0005807209359071092650790935A07509312
:1047C0005B0790935C0790935D0720935E0730939F
:1047D0005F0790936007ABE6B7E0EEE7F3E08CE0AD
:1047E00001900D928150E1F70895A6E3B0E0EBEF60
:1047F000F3E20C94E53C0E94EF16299AE09133070E
:10480000FF27EE0FFF1FEB5FF84F0190F081E02DC7
:10481000E858FF4F80919F0799274497E817F907B9
:104820000CF4CF019A83898397FF02C01A82198200
:1048300080914E04843608F05DC080910301882386
:1048400099F480910403909105038F5F9F4F61F469
:1048500088E99AE39093C1038093C00380E09CE0D1
:1048600090930503809304038091930490919404A2
:10487000009731F00197909394048093930404C0BF
:104880001092550410924404809100018A3011F472
:10489000289A01C0289880918E0490918F04815DA0
:1048A000974028F180914A07482F55275A8349831A
:1048B00081E080934404E0913107FF27EE0FFF1F52
:1048C000EB5FF84F11821082E0913207FF27EE0F65
:1048D000FF1FEB5FF84F11821082E0913407FF2732
:1048E000EE0FFF1FEB5FF84F118210824FC2109244
:1048F00055044CC280914E048D3808F447C2109282
:10490000440480914B0722E3829FC00111249093BD
:1049100094048093930489819A8189976CF08091A3
:104920008E0490918F04AFEF8F3F9A0781F101962B
:1049300090938F0480938E0480918E0490918F04C5
:10494000883C910520F0E981FA81B89704F510922E
:10495000AD041092AE041092AF041092B004109205
:10496000A9041092AA041092AB041092AC04109205
:1049700031041092320410923304109234041092D5
:1049800035041092360410923704109238042981AD
:104990003A81293C31050CF459C180915504882392
:1049A00009F0F4C180913407E82FFF27EE0FFF1FB5
:1049B000EB5FF84F808191818C3491050CF4BCC081
:1049C000809192048F5F80939204893C08F4DEC149
:1049D0002998109255041092920410928F0410920C
:1049E0008E0480913107282F3327F901EE0FFF1F26
:1049F000EB5FF84F80819181873491059CF4E091C1
:104A00003207FF27EE0FFF1FEB5FF84F0190F08199
:104A1000E02DF7FF03C0F095E195FF4FE734F10576
:104A20000CF46CC080913207682F7727DB01AA0F46
:104A3000BB1FAB5FB84F8D919C9111978734910547
:104A40003CF0F901EE0FFF1FEB5FF84F8081918181
:104A50008D919C918734910564F0F901EE0FFF1F51
:104A6000EB5FF84F808191818734910514F042E02B
:104A700001C041E0FB01EE0FFF1FEB5FF84F8081AB
:104A80009181863491055CF4F901EE0FFF1FEB5F15
:104A9000F84F80819181873491050CF043E0FB0150
:104AA000EE0FFF1FEB5FF84F808191818A5B9F4F74
:104AB0005CF4F901EE0FFF1FEB5FF84F80819181ED
:104AC000873491050CF044E0660F771F6B5F784FD9
:104AD000DB018D919C918A5B9F4F5CF4220F331F09
:104AE0002B5F384FF90180819181863491050CF458
:104AF00045E0A2E0B0E0042E0E942F3D80913907EE
:104B000080FF10C080910E0390910F03875B93404C
:104B100038F480910E0390910F038E5E924010F452
:104B20000E9495100E94E20346E461E377E00E9450
:104B30000B040E94D32082C080819181855B9F4FAE
:104B40000CF081C0809192048F5F80939204893C25
:104B500008F41CC129988FEF04E010E0D801082E5A
:104B60000E942F3D109255041092920410928F04CF
:104B700010928E040E94D3208091F9039091FA0341
:104B800060E071E00E94953CD801062E0E942F3D06
:104B90008091F9039091FA0360E071E00E94953CE6
:104BA0000F5F1F4FD801082E0E942F3D8091FB03FD
:104BB0009091FC0360E071E00E94953C0F5F1F4FF5
:104BC000D801062E0E942F3D8091FB039091FC039B
:104BD00060E071E00E94953C0F5F1F4FD801082EE6
:104BE0000E942F3D6091FD037091FE038091FF03B1
:104BF000909100040E94773BDC01CB0160E071E002
:104C00000E94953C0F5F1F4FD801062E0E942F3D3A
:104C10006091FD037091FE038091FF039091000469
:104C20000E94773BDC01CB0160E071E00E94953C83
:104C30000F5F1F4FD801082E0E942F3D0E94E203F4
:104C40000E942C22A3C010929204A0C0E981FA8194
:104C5000B3970CF09BC080913407482F5527FA0179
:104C6000EE0FFF1FEB5FF84F80819181855B9F4FB7
:104C70000CF06DC0809191048F5F80939104893C0A
:104C800008F467C088EC8093910481E090E09093F1
:104C90008F0480938E0481E0809355041092A504C4
:104CA0001092A6041092A7041092A8041092310446
:104CB000109232041092330410923404109235048E
:104CC0001092360410923704109238041092210486
:104CD00010922204109223041092240410922904AA
:104CE00010922A0410922B0410922C04809101043B
:104CF00090910204A0910304B091040480932504D0
:104D000090932604A0932704B0932804809109046B
:104D100090910A04A0910B04B0910C0480932D048F
:104D200090932E04A0932F04B09330041092AD04FE
:104D30001092AE041092AF041092B0041092A90425
:104D40001092AA041092AB041092AC0402C010920C
:104D50009104440F551F4B5F584FDA018D919C9180
:104D60008C3491058CF0809190048F5F8093900437
:104D7000893C60F01092550488EC80939004109266
:104D80008F0410928E0402C01092900480916B03E5
:104D9000815080936B0380916B038F3F29F080914A
:104DA0004404882309F4FCC20E946C1D80913107E1
:104DB000A82EBB24D501AA0FBB1FFD01EB5FF84F46
:104DC0000190F081E02DFCABEBAB80914007E82E29
:104DD000FF24A55EB84F0D90BC91A02DBAA7A9A73E
:104DE00080914107482E552480913207C82EDD243A
:104DF000C601880F991FDC01AB5FB84F0D90BC91C5
:104E0000A02DB8A7AFA3855E984FFC01208031800C
:104E1000E0913407AE2FBB27AA0FBB1FAB5FB84F83
:104E20000D90BC91A02DBCA3ABA310919803612F52
:104E3000772767FD7095872F972F0E94943B17FF68
:104E400006C020E030E040E853E40E94EF3A20E062
:104E500030E040E251E40E94EF3A20E030E040E8E8
:104E60005BE30E940E3C3B014C016093A2077093F0
:104E7000A3078093A4079093A50710919903612F2E
:104E8000772767FD7095872F972F0E94943B17FF18
:104E900006C020E030E040E853E40E94EF3A20E012
:104EA00030EE4BE257E40E94313B609394077093DD
:104EB000950780939607909397072091B303222339
:104EC00011F40C9418368AE090E09093C10380931B
:104ED000C003E22FFF27E2FF09C080916404482F3E
:104EE0005527440F551F440F551F10C0E3FD03C045
:104EF00040E050E00BC0809164049927880F991F0F
:104F0000880F991F44275527481B590B20916E0481
:104F100030916F04C901F3E0880F991FFA95E1F70A
:104F2000821B930B840F951F68E070E00E94953CF4
:104F30008B0170936F0460936E04E4FF09C080914D
:104F40006404482F5527440F551F440F551F0FC0A9
:104F5000E5FD02C00C942D36809164049927880FDA
:104F6000991F880F991F44275527481B590B2091DB
:104F7000700430917104C90163E0880F991F6A952C
:104F8000E1F7821B930B840F951F68E070E00E948D
:104F9000953C7EAB6DAB709371046093700480910F
:104FA000B203282F332723FF03C082E390E004C01D
:104FB00022FF07C08EEC9FEF9093730480937204DE
:104FC00004C0109273041092720421FF09C08091F2
:104FD0009F039091A00301969093A00380939F0359
:104FE00024FF09C080919F039091A00301979093A3
:104FF000A00380939F034BA95CA94E9D90014F9DF8
:10500000300D5E9D300D1124A9A5BAA5A49DC00147
:10501000A59D900DB49D900D1124280F391FC80136
:1050200068E070E00E94953C260F371F3CAB2BAB2D
:105030003093500420934F04EFA1F8A5EE9D80011A
:10504000EF9D100DFE9D100D1124249CC001259C88
:10505000900D349C900D1124080F191F8DA99EA945
:1050600068E070E00E94953C060F171F10935204F1
:105070000093510480917204909173042BA13CA180
:10508000821B930B909354048093530480913907AF
:1050900082FF0CC080E090E0A0E0B0E08093940735
:1050A00090939507A0939607B093970720E030E080
:1050B00040E050E0C401B3010E949E3B882364F4A9
:1050C00080E090E0A0E0B0E08093A2079093A30777
:1050D000A093A407B093A50720E030E040E050E0A3
:1050E000609194077091950780919607909197072A
:1050F0000E949E3B882364F480E090E0A0E0B0E052
:105100008093940790939507A0939607B093970781
:1051100080916507682F772784E0882E912C86225E
:10512000972262FD7FC063FD7DC020910104309114
:105130000204409103045091040421368AEE38079A
:1051400080E0480780E05807E4F0C701B3E0880F2B
:10515000991FBA95E1F7EBA9FCA9E81BF90BF093AD
:105160005004E0934F042158384341405040E4F04C
:10517000C701A4E0880F991FAA95E1F7E81BF90B76
:105180000FC0205A35414F4F5F4F74F4C701E3E021
:10519000880F991FEA95E1F7EBA9FCA9E80FF91F21
:1051A000F0935004E0934F042091090430910A04D5
:1051B00040910B0450910C042136FAEE3F07F0E0C9
:1051C0004F07F0E05F07F4F0C70173E0880F991F05
:1051D0007A95E1F7D801A81BB90BB0935204A093BC
:1051E00051042158384341405040E4F094E0EE0C23
:1051F000FF1C9A95E1F7AE19BF09B0935204A09332
:10520000510410C0205A35414F4F5F4F5CF483E08A
:10521000EE0CFF1C8A95E1F70E0D1F1D1093520432
:1052200000935104F601EE0FFF1FEB5FF84F208152
:10523000318180915807482F55274217530734F47E
:10524000892821F081E08093600411C0F601EE0FFF
:10525000FF1FEB5FF84F2081318180915907DA0100
:10526000A81BB1092A173B0714F410926004F60139
:10527000EE0FFF1FEB5FF84F80819181AA27BB27BC
:10528000A41BB50B8A179B0734F463FF04C081E0AD
:105290008093610417C080916104882399F0CC0C3D
:1052A000DD1CE5E0F7E0CE0EDF1EF6012081318146
:1052B000809159079927841B950B8217930714F443
:1052C00010926104F501EE0FFF1FEB5FF84F808134
:1052D00091814817590734F460FF04C081E080933E
:1052E000630415C080916304882389F0F501EE0FF3
:1052F000FF1FEB5FF84F2081318180915907FA0140
:10530000E81BF1092E173F0714F410926304F5010E
:10531000EE0FFF1FEB5FF84F808191818A179B078B
:1053200034F461FF04C081E08093620417C080916F
:105330006204882399F0AA0CBB1C25E037E0A20E7A
:10534000B31ED5012D913C91809159079927841B5B
:10535000950B8217930714F41092620480916004F5
:10536000882321F480916104882321F081E08093D7
:105370005F0402C010925F0480916304882321F4CB
:1053800080916204882351F081E080935E04109242
:105390005F0410926004109261040EC010925E04CB
:1053A00080915F04882311F40C94313684E690E0F8
:1053B0009093C1038093C003809157079927E98197
:1053C000FA818E179F0714F49A838983809144048D
:1053D000882341F110925404109253041092500407
:1053E00010924F0410925204109251048DEC9CECD8
:1053F000ACECBDE38093A2079093A307A093A4070E
:10540000B093A5078AE097EDA3EABBE380939407E6
:1054100090939507A0939607B093970710925F0417
:1054200010925E0420910104309102044091030423
:10543000509104042FA738AB49AB5AAB80918C072D
:1054400090918D07A0918E07B0918F07820F931FC7
:10545000A41FB51F80938C0790938D07A0938E0790
:10546000B0938F078091090490910A04A0910B04D6
:10547000B0910C048BA79CA7ADA7BEA78091900705
:1054800090919107A0919207B09193072BA53CA50D
:105490004DA55EA5820F931FA41FB51F8093900793
:1054A00090939107A0939207B0939307809105047E
:1054B00090910604A0910704B09108048F8F98A3DF
:1054C000A9A3BAA38091840790918507A09186072C
:1054D000B09187072F8D38A149A15AA1820F931F40
:1054E000A41FB51F8093840790938507A093860718
:1054F000B093870780910D0490910E04A0910F0442
:10550000B09110048B8F9C8FAD8FBE8F80917C07E4
:1055100090917D07A0917E07B0917F072B8D3C8DE8
:105520004D8D5E8D820F931FA41FB51F80937C0746
:1055300090937D07A0937E07B0937F0790905E04C1
:10554000992011F00C94893680915F04882311F022
:105550000C9489360C94393680EEA8168FEFB80675
:105560008FEFC8068FEFD80644F480EEA82E8FEF99
:10557000B82E8FEFC82E8FEFD82E2132310541057E
:10558000510534F010E2E12EF12C012D112D0DC04A
:10559000205E3F4F4F4F5F4F44F4B0EEEB2EBFEF16
:1055A000FB2EBFEF0B2FBFEF1B2F8091210490919B
:1055B0002204A0912304B09124048A199B09AC0908
:1055C000BD098093210490932204A0932304B093F7
:1055D00024048091290490912A04A0912B04B09175
:1055E0002C048E199F09A00BB10B80932904909372
:1055F0002A04A0932B04B0932C048091D90390919A
:10560000DA038F3F910509F008F4ADC4992009F041
:105610002EC480915F04882309F029C460918C070F
:1056200070918D0780918E0790918F0720E031E077
:1056300040E050E00E94CA3C19012A0120938C07E7
:1056400030938D0740938E0750938F07609190079A
:1056500070919107809192079091930720E031E03B
:1056600040E050E00E94CA3C2F8B388F498F5A8F00
:10567000209390073093910740939207509393079C
:10568000E0904507FF240027112720911104309155
:1056900012044091130450911404C801B7010E94F0
:1056A000563C20E031E040E050E00E94CA3C390125
:1056B0004A01209311043093120440931304509331
:1056C0001404209115043091160440911704509150
:1056D0001804C801B7010E94563C20E031E040E0C8
:1056E00050E00E94CA3C59016A012093150430938E
:1056F0001604409317045093180460911904709194
:105700001A0480911B0490911C0420E031E040E0D9
:1057100050E00E94CA3C2093190430931A0440932D
:105720001B0450931C04C201B10166197709880952
:105730009909E0905E07FF2400271127A80197012F
:105740000E94CA3C209386043093870440938804C7
:1057500050938904CA01B90120E031E040E050E0F3
:105760000E94CA3C3E8B2D8B30935D0420935C04D9
:105770006F89788D898D9A8D6A197B098C099D09AD
:10578000A80197010E94CA3C79018A01CA01B901A6
:1057900020E031E040E050E00E94CA3C3CAB2BAB43
:1057A00030935B0420935A046091840770918507BD
:1057B000809186079091870720E031E040E050E03B
:1057C0000E94CA3C20938407309385074093860744
:1057D0005093870760917C0770917D0780917E07C9
:1057E00090917F0720E031E040E050E00E94CA3C09
:1057F00020937C0730937D0740937E0750937F076B
:105800002F8D38A149A15AA18FA598A9A9A9BAA9F4
:10581000281B390B4A0B5B0B298B3A8B4B8B5C8B10
:105820002093A1043093A2044093A3045093A404B2
:105830002B8D3C8D4D8D5E8D8BA59CA5ADA5BEA5FC
:10584000281B390B4A0B5B0B2D873E874F87588BE4
:1058500020939D0430939E0440939F045093A00492
:1058600029893A894B895C892093990430939A0459
:1058700040939B0450939C048D859E85AF85B88989
:105880008093950490939604A0939704B093980402
:105890008091250490912604A0912704B0912804BA
:1058A000821B930BA40BB50B8093250490932604C5
:1058B000A0932704B093280480912D0490912E0486
:1058C000A0912F04B09130042D853E854F855889D5
:1058D000821B930BA40BB50B80932D0490932E0485
:1058E000A0932F04B0933004C401B3012AE130E047
:1058F00040E050E00E94CA3C3093CD062093CC0695
:10590000C601B5012AE130E040E050E00E94CA3C07
:105910003093CF062093CE0649895A895093D106F9
:105920004093D0068D859E859093D3068093D206B2
:10593000C201B1012AE130E040E050E00E94CA3CDF
:105940003093D5062093D4066F89788D898D9A8DF2
:105950002AE130E040E050E00E94CA3C3093D70694
:105960002093D606F092E506E092E4068BA99CA966
:10597000880F991F2BA93CA9F3E0220F331FFA953A
:10598000E1F7820F931F9093E7068093E60681E08C
:1059900090E09093810480938004809178049091AA
:1059A0007904A0917A04B0917B0482199309A40927
:1059B000B509815E914BAF4FBF4F8F539C49A040BB
:1059C000B04008F0C5C029893A894B895C892130EB
:1059D00080E1380780E0480780E058070CF450C0A9
:1059E00080917F04882309F447C0DA01C901ECE003
:1059F000B595A79597958795EA95D1F701969093D8
:105A0000810480938004DA01C90173E0B595A795FC
:105A1000979587957A95D1F780938604909387041C
:105A2000A0938804B093890489589341A040B04062
:105A300064F088E893E1A0E0B0E08093860490935E
:105A40008704A0938804B0938904609186047091C0
:105A50008704809188049091890420E031E040E03F
:105A600050E00E94CA3C8D899E89820F931F9093BB
:105A70005D0480935C0469C081E080937F0465C00D
:105A800010927F0429893A894B895C89203080EF04
:105A900038078FEF48078FEF58070CF056C08091FA
:105AA0007E04882309F44DC0DA01C901B095A095A0
:105AB000909581959F4FAF4FBF4F6CE0B595A795DF
:105AC000979587956A95D1F7019690938104809375
:105AD0008004CA01B90128E030E040E050E00E94B3
:105AE000CA3C2093860430938704409388045093E3
:105AF000890428573C4E4F4F5F4F64F488E79CEE73
:105B0000AFEFBFEF8093860490938704A09388043F
:105B1000B093890460918604709187048091880411
:105B20009091890420E031E040E050E00E94CA3CBE
:105B3000AD89BE89A20FB31FB0935D04A0935C042E
:105B40000BC081E080937E0407C010927E0404C0E5
:105B5000109281041092800480915F07082F112712
:105B600080918004909181040817190724F4109300
:105B700081040093800429893A894B895C892150EA
:105B80003440404050405CF08091EF039091F0032E
:105B90002091800430918104820F931F13C02989C2
:105BA0003A894B895C8920503C4F4F4F5F4F74F4CA
:105BB0008091EF039091F003209180043091810453
:105BC000821B930B9093F0038093EF0381E090E0AE
:105BD0009093810480938004109282041092830435
:105BE000109284041092850480917404909175043D
:105BF000A0917604B09177042F89388D498D5A8D04
:105C0000821B930BA40BB50B815E914BAF4FBF4F23
:105C10008F539C49A040B04008F0C6C08D859E853A
:105C2000AF85B88981509041A040B0400CF454C079
:105C300080917D04882309F44BC08D859E85AF85B6
:105C4000B8893CE0B595A795979587953A95D1F792
:105C5000019690938104809380048D859E85AF8505
:105C6000B88923E0B595A795979587952A95D1F79B
:105C70008093820490938304A0938404B09385045A
:105C800089589341A040B04064F088E893E1A0E0D7
:105C9000B0E08093820490938304A0938404B09333
:105CA00085046091820470918304809184049091B2
:105CB000850420E031E040E050E00E94CA3C8BA91E
:105CC0009CA9820F931F90935B0480935A0469C030
:105CD00081E080937D0465C010927D042D853E8512
:105CE0004F855889203080EF38078FEF48078FEFB6
:105CF00058070CF056C080917C04882309F44DC0ED
:105D0000DA01C901B095A095909581959F4FAF4F4D
:105D1000BF4FFCE0B595A79597958795FA95D1F774
:105D200001969093810480938004CA01B90128E010
:105D300030E040E050E00E94CA3C2093820430935F
:105D40008304409384045093850428573C4E4F4F5E
:105D50005F4F64F488E79CEEAFEFBFEF809382045F
:105D600090938304A0938404B0938504609182048B
:105D700070918304809184049091850420E031E047
:105D800040E050E00E94CA3CABA9BCA9A20FB31FDF
:105D9000B0935B04A0935A040BC081E080937C0411
:105DA00007C010927C0404C01092810410928004F9
:105DB00080918204909183049093E1068093E006A1
:105DC00080918004909181040817190724F410939E
:105DD0008104009380042D853E854F85588921508C
:105DE0003440404050405CF08091F1039091F203C8
:105DF0002091800430918104820F931F13C02D8560
:105E00003E854F85588920503C4F4F4F5F4F74F46B
:105E10008091F1039091F2032091800430918104EC
:105E2000821B930B9093F2038093F1038091EF0315
:105E30009091F0039093D9068093D8068091F10356
:105E40009091F2032091F5033091F603821B930B9E
:105E50009C01E3E0220F331FEA95E1F7880F991FB9
:105E6000820F931F9093DB068093DA0608C010928E
:105E70005B0410925A0410925D0410925C0420E0BE
:105E800030E040E050E06091940770919507809178
:105E90009607909197070E949E3B882341F41092A9
:105EA0005B0410925A0410925D0410925C0480917D
:105EB0008C0790918D07A0918E07B0918F078093EA
:105EC000780490937904A0937A04B0937B04809132
:105ED000900790919107A0919207B09193078093BA
:105EE000740490937504A0937604B0937704109291
:105EF00011041092120410921304109214041092C0
:105F0000150410921604109217041092180410929F
:105F1000190410921A0410921B0410921C0410927F
:105F20008C0710928D0710928E0710928F07109297
:105F30009007109291071092920710929307109277
:105F40008407109285071092860710928707109297
:105F50007C0710927D0710927E0710927F071092A7
:105F6000DA031092D9038090530490905404940162
:105F700097FE04C022273327281939092531310516
:105F80003CF08091390784FD03C081E080938A044E
:105F9000E09042075901CC24B7FCC094DC2CB4013A
:105FA000882777FD8095982F2E2D33274427552756
:105FB0000E94563C9B01AC01C601B5010E94563CB3
:105FC00020E032E040E050E00E94CA3C89019A01A2
:105FD000FF24E89CC001E99C900DF89C900D1124D1
:105FE00064E070E00E94953C600F711F882777FD88
:105FF0008095982F6093A5047093A6048093A704BE
:106000009093A804209131043091320440913304DC
:1060100050913404261B370B480B590B2093310445
:10602000309332044093330450933404213593EC7D
:10603000390790E0490790E059072CF080E593EC90
:10604000A0E0B0E009C0205B3C434F4F5F4F64F4D9
:1060500080EB9CE3AFEFBFEF809331049093320469
:10606000A0933304B09334048091390783FFA1C017
:10607000809143048150809343048F3FD9F40E9460
:10608000653790933E0480933D0420913F04309106
:106090004004821B930B845E9D4F68E671E00E9472
:1060A000953C845B9040909342048093410482E34A
:1060B0008093430460910104709102048091030471
:1060C0009091040420E032E040E050E00E94CA3C9D
:1060D000890137FF03C0109501951F4F6091090496
:1060E00070910A0480910B0490910C0420E032E03E
:1060F00040E050E00E94CA3CB90137FF03C07095F0
:1061000061957F4F601771070CF4B8016332710518
:1061100074F480918A04882351F080913D04909119
:106120003E049093400480933F0410928A0420918F
:1061300097033327629FC001639F900D729F900D5C
:10614000112460E470E00E94953C261B370B121668
:1061500013064CF58091410490914204FC012E9F5E
:10616000C0012F9F900D3E9F900D112460E270E0C2
:106170000E94953C882777FD8095982F20913104C7
:10618000309132044091330450913404260F371F6C
:10619000481F591F20933104309332044093330435
:1061A0005093340406C084E690E09093C10380933A
:1061B000C00380918B04815080938B048F3F09F042
:1061C00079C088E180938B04E0904507FF24002785
:1061D0001127609101047091020480910304909151
:1061E0000404A80197010E94CA3C3093AB06209397
:1061F000AA066091090470910A0480910B049091A1
:106200000C04A80197010E94CA3C3093AD0620936C
:10621000AC0680919D0790919E079093AF06809366
:10622000AE068091A7079091A8079093B10680933E
:10623000B0068091A0079091A1079093B306809338
:10624000B20680915604909157049093B5068093BE
:10625000B4066091390470913A0480913B049091A6
:106260003C0420E032E040E050E00E94CA3C309321
:10627000B7062093B60680913D0490913E0490931A
:10628000BB068093BA06809108039091090390930E
:10629000BD068093BC0680914E0499279093BF065B
:1062A0008093BE0680918807909189079093CB06D2
:1062B0008093CA0680915E04C0908107D0908207C7
:1062C000882391F0B601882777FD8095982F0E944A
:1062D000943B2091A2073091A3074091A4075091CD
:1062E000A5070E940E3C2DC060910104709102042C
:1062F00080910304909104040E94943B20919407A0
:106300003091950740919607509197070E940E3C57
:106310007B018C01B601882777FD8095982F0E941C
:10632000943B2091A2073091A3074091A40750917C
:10633000A5070E940E3C9B01AC01C801B7010E9459
:10634000EF3A0E94773B70938207609381078091B8
:106350005F04C0907907D0907A07882391F0B60146
:10636000882777FD8095982F0E94943B2091A20763
:106370003091A3074091A4075091A5070E940E3CBD
:106380002DC06091090470910A0480910B049091D2
:106390000C040E94943B2091940730919507409102
:1063A0009607509197070E940E3C7B018C01B60125
:1063B000882777FD8095982F0E94943B2091A20713
:1063C0003091A3074091A4075091A5070E940E3C6D
:1063D0009B01AC01C801B7010E94EF3A0E94773BD4
:1063E00070937A076093790720909407309095070F
:1063F00040909607509097076091A0077091A10771
:10640000882777FD8095982F0E94943B2091A207C2
:106410003091A3074091A4075091A5070E940E3C1C
:106420007B018C0160911D0470911E0480911F04FA
:10643000909120040E94943BA20191010E940E3C85
:1064400020E030E040E05FE30E940E3C9B01AC01A5
:10645000C801B7010E94EF3A0E94773B8B0170930D
:10646000A1076093A007E0907907F0907A07F09277
:10647000E306E092E2066091090470910A048091BB
:106480000B0490910C040E94943BA20191010E9484
:106490000E3C69877A878B879C870E94773B709335
:1064A000DD066093DC0620915104309152043EA336
:1064B0002DA33093E9062093E806809181079091FF
:1064C000820738E0813093071CF080E098E005C037
:1064D0008050984F34F480E098EF90938207809337
:1064E000810751E0E51658E0F5061CF080E098E0E1
:1064F00007C080E0E81688EFF80634F480E098EFF3
:1065000090937A078093790798E0013019071CF07F
:1065100080E098E005C00050184F34F480E098EF18
:106520009093A1078093A00780913907992780FF56
:10653000D9C04091940381FF0EC0423310F5809181
:1065400056049091570444979093590480935804AB
:106550001092450419C020919F033091A003240F8D
:10656000311D80913E079927FC012E9FC0012F9F6E
:10657000900D3E9F900D1124449790935904809361
:10658000580481E08093450480914404882321F0DD
:1065900010925904109258042091560430915704D7
:1065A0004091580450915904421753070CF09AC077
:1065B00080914504882309F495C0241B350B8091F4
:1065C00095039927AC01249FC001259F900D349F0E
:1065D000900D112460E170E00E94953C09811A81C0
:1065E000061B170B2091D7033091D803809193039A
:1065F0009927DC012A9FC0012B9F900D3A9F900D97
:10660000112468E070E00E94953C061B170B609116
:10661000390470913A0480913B0490913C0420E04D
:1066200032E040E050E00E94CA3CCA01B90120912A
:1066300096033327442755270E94563C20E230E03A
:1066400040E050E00E94CA3CBFEF2E3C3B0714F4F0
:106650002EEC3FEF80918C0490918D04AC0164E0AE
:10666000440F551F6A95E1F7481B590B2333310539
:1066700014F022E330E0021B130BCA01800F911FBC
:1066800060E170E00E94953C70938D0460938C04EF
:1066900080913A079927681779078CF4E981FA8184
:1066A000E817F9072CF090938D0480938C0407C0B1
:1066B00029813A8130938D0420938C040DC0809100
:1066C0008C0490918D0449815A814817590724F40C
:1066D00050938D0440938C0480918C0490918D0490
:1066E0009A838983A981BA81B093B906A093B80629
:1066F000E090A007F090A1070091A5041091A604D6
:106700002091A7043091A80480919F07882E992496
:1067100054971CF41C821B8229C089819A8162E0F3
:1067200070E00E94953C9701201B310BCB0126178E
:1067300037070CF4C901709561957F4F6817790789
:106740000CF4BC01C401E981FA818E1B9F0B681710
:1067500079070CF4CB0129813A81281939093C8346
:106760002B832817390714F49C838B8360904F0484
:10677000709050048091B9049091BA04681A790A13
:1067800080918107909182078619970990938B07D2
:1067900080938A0720E030E040E050E0C201B10180
:1067A0000E949E3B8823D1F16091AD047091AE04AC
:1067B0008091AF049091B0040E94943B5B016C0106
:1067C000609101047091020480910304909104048B
:1067D0000E94943BA20191010E940E3C7B018C011E
:1067E000B301882777FD8095982F0E94943B9B01E9
:1067F000AC01C801B7010E94EE3A9B01AC01C60191
:10680000B5010E94EF3A0E94773B6093AD0470930C
:10681000AE048093AF049093B0041CC020918A070B
:1068200030918B07442737FD4095542F8091AD045C
:106830009091AE04A091AF04B091B004820F931F69
:10684000A41FB51F8093AD049093AE04A093AF0432
:10685000B093B0048091AD049091AE04A091AF04C8
:10686000B091B004181619061A061B0624F40297F4
:10687000A109B10903C00296A11DB11D8093AD0409
:106880009093AE04A093AF04B093B0048091AD0494
:106890009091AE04A091AF04B091B00481383EE372
:1068A000930730E0A30730E0B3072CF080E89EE3C5
:1068B000A0E0B0E009C08058914CAF4FBF4F64F4E6
:1068C00080E891ECAFEFBFEF8093AD049093AE04FE
:1068D000A093AF04B093B00460918A0770918B07C6
:1068E00080918F0390919003A0919103B0919203B6
:1068F0008D839E83AF83B887882777FD8095982FF7
:106900000E94943B7B018C016091AD047091AE04B8
:106910008091AF049091B0040E94943B9B01AC0124
:106920006D817E818F8198850E940E3C9B01AC0118
:10693000C801B7010E94EF3A0E94773B5B016C01EE
:106940007CAB6BAB80919E03E82EFF2400271127C0
:106950008B819C8197FF03C0909581959F4F62E04A
:1069600070E00E94953C9B01A981BA812A0F3B1FD0
:10697000442737FD4095542FC801B7010E94563C6B
:1069800020E430E040E050E00E94CA3C3901EBA92D
:10699000FCA9E217F3070CF49501AA24BB24A6185E
:1069A000B708A501A216B3060CF4A90189819A8142
:1069B0002B813C81820F931F840F951F97FF03C08B
:1069C00020E030E005C09401881599050CF49C0185
:1069D00080918307C82EDD24C601C216D3060CF4AD
:1069E000C90180937B0789819A81841B950B4B8118
:1069F0005C81840F951F97FF03C020E030E005C045
:106A00009401881599050CF49C01C601C216D306A1
:106A10000CF4C901809380078091BB049091BC0461
:106A2000ADA1BEA1A81BB90BBCABABAB80917907E4
:106A300090917A078A1B9B0B909378078093770736
:106A400020E030E040E050E0C201B1010E949E3BF6
:106A5000882371F16091A9047091AA048091AB041C
:106A60009091AC040E94943B7B018C01EBA9FCA9A2
:106A7000BF01882777FD8095982F0E94943B9B014A
:106A8000AC0169857A858B859C850E94EE3A9B01D5
:106A9000AC01C801B7010E94EF3A0E94773B6093B6
:106AA000A9047093AA048093AB049093AC041CC017
:106AB0002091770730917807442737FD4095542F70
:106AC0008091A9049091AA04A091AB04B091AC0468
:106AD000820F931FA41FB51F8093A9049093AA044B
:106AE000A093AB04B093AC048091A9049091AA0444
:106AF000A091AB04B091AC04181619061A061B0637
:106B000024F40297A109B10903C00296A11DB11D89
:106B10008093A9049093AA04A093AB04B093AC040F
:106B20008091A9049091AA04A091AB04B091AC0407
:106B30008138FEE39F07F0E0AF07F0E0BF072CF0DD
:106B400080E89EE3A0E0B0E009C08058914CAF4FD0
:106B5000BF4F64F480E891ECAFEFBFEF8093A904DE
:106B60009093AA04A093AB04B093AC046091770710
:106B700070917807882777FD8095982F0E94943B25
:106B80007B018C016091A9047091AA048091AB04EF
:106B90009091AC040E94943B9B01AC016D817E817D
:106BA0008F8198850E940E3C9B01AC01C801B70102
:106BB0000E94EF3A0E94773B9301661577050CF42B
:106BC0009B01C501A216B3060CF4C90149815A8183
:106BD000480F591FAB81BC814A1B5B0B57FF03C099
:106BE00020E030E005C09401481559050CF49A01E5
:106BF000A601C216D3060CF4A90140939A07298175
:106C00003A81281B390BEB81FC812E1B3F0B37FF90
:106C100003C040E050E005C0A401281539050CF47C
:106C2000A901C601C416D5060CF0D1C0CA01CFC057
:106C300020916E0430916F04C90113E0880F991FF1
:106C40001A95E1F7821B930B68E070E00E94953C77
:106C50008B0170936F0460936E0440E050E00C94DD
:106C6000B72780915E04882311F40C94E6290C94D4
:106C7000DC29E0904507FF24002711276FA578A99C
:106C800089A99AA9A80197010E94CA3C80919D07F1
:106C900090919E07AA2797FDA095BA2F281B390B24
:106CA0004A0B5B0BCA01B90120E130E040E050E043
:106CB0000E94CA3C59016A016BA57CA58DA59EA5C1
:106CC000A80197010E94CA3C8091A7079091A8074C
:106CD000AA2797FDA095BA2F281B390B4A0B5B0BEF
:106CE000CA01B90120E130E040E050E00E94CA3C16
:106CF00079018A01F1E2AF16B104C104D10414F4A0
:106D00000C94AC2AB0E2AB2EB12CC12CD12C0C943B
:106D1000BD2A1092110410921204109213041092C2
:106D20001404109215041092160410921704109275
:106D3000180410928C0710928D0710928E071092F3
:106D40008F0710929007109291071092920710925D
:106D5000930710928407109285071092860710926D
:106D6000870710927C0710927D0710927E07109281
:106D70007F078091210490912204A0912304B09177
:106D800024048093250490932604A0932704B093B1
:106D900028048091290490912A04A0912B04B09199
:106DA0002C0480932D0490932E04A0932F04B09371
:106DB00030041092DA031092D90310925D041092FD
:106DC0005C0410925B0410925A040C94FD2A809388
:106DD0009807E2E1CA5C0C94013D8091BD0490915A
:106DE000BE04A091BF04B091C0048093C5049093E9
:106DF000C604A093C704B093C8048091C1049091C5
:106E0000C204A091C304B091C4048093C9049093B8
:106E1000CA04A093CB04B093CC0408951092BA0492
:106E20001092B9041092BC041092BB0408951F92F2
:106E30000F920FB60F9211242F933F934F938F937E
:106E40009F938091B707833019F08430A1F508C073
:106E50008EB58093CD041EBC84E08093B7072BC011
:106E60008091CD049927382F22278EB59927282B7A
:106E7000392BC9018D509E4F875E9340D0F480918D
:106E8000BA07853019F0863069F406C03093BC0724
:106E90002093BB0786E00BC03093BE072093BD074D
:106EA00087E005C03093C0072093BF0785E080933B
:106EB000BA071092B7079F918F914F913F912F91F1
:106EC0000F900FBE0F901F901895A0E1B0E0EBE679
:106ED000F7E30C94E53CE0905007FF2433E0EE0C20
:106EE000FF1C3A95E1F7002711276091010470918A
:106EF00002048091030490910404A80197010E9468
:106F0000CA3C59016A01C9010E94793A6D877E879E
:106F10008F87988BC5010E94D93A69877A878B87BA
:106F20009C876091090470910A0480910B049091F0
:106F30000C04A80197010E94CA3C79018A01C90189
:106F40000E94793A6D837E838F839887C7010E9460
:106F5000D93A69837A838B839C83A090BB07B090D6
:106F6000BC078091AE07992787FD9095A81AB90AAA
:106F70008090BD079090BE078091AF07992787FD4D
:106F80009095881A990A4090BF075090C007809149
:106F9000B007992787FD9095481A590A2090B107A4
:106FA0003090B207C090B307D090B407C214D30496
:106FB000D0F46090B5077090B6076214730498F42B
:106FC000710100271127B401882777FD8095982F3C
:106FD000A80197010E94563C9601442755270E941C
:106FE000CA3C49011CC02C143D0448F56090B5070B
:106FF0007090B6076C147D0410F5760100271127F8
:10700000B501882777FD8095982FA80197010E94E8
:10701000563C9101442755270E94CA3C5901B201B0
:10702000882777FD8095982FA80197010E94563CEC
:107030009301442755270E94CA3C290124C0E090AF
:10704000B507F090B60700271127B501882777FD0F
:107050008095982FA80197010E94563C91014427E2
:1070600055270E94CA3C5901B401882777FD8095B5
:10707000982FA80197010E94563C96014427552756
:107080000E94CA3C4901B501882777FD8095982F59
:107090000E94943B29853A854B855C850E940E3C75
:1070A0005B016C01B401882777FD8095982F0E94C1
:1070B000943B7B018C012D813E814F8158850E943C
:1070C0000E3C2D853E854F8558890E940E3C9B01C4
:1070D000AC01C601B5010E94EF3A3B014C01B2017F
:1070E000882777FD8095982F0E94943B5B016C0167
:1070F00029813A814B815C81C801B7010E940E3C15
:107100007B018C012D813E814F815885C601B501DF
:107110000E940E3C9B01AC01C801B7010E94EF3AEE
:107120000E94773B7B018C0129813A814B815C81F4
:10713000C601B5010E940E3C2D853E854F855889BC
:107140000E940E3C9B01AC01C401B3010E94EE3AC7
:107150000E94773BDC01CB01B7010E94D1399C0131
:1071600097FF05C088279927821B930B04C088E6E8
:1071700091E0821B930BE2E1C05F0C94013D809192
:10718000B707813041F0813018F0823049F51CC0DA
:107190002A9A81E016C02A988091BA07853011F4A6
:1071A00081E305C0863011F482E301C083E38EBD24
:1071B00088E090E00E94CF0C9093B9078093B807C5
:1071C00082E08093B70708958091B8079091B9073E
:1071D0000E94D80C882321F01EBC83E08093B7075F
:1071E0000895A0E0B0E0E7EFF8E30C94E73C299ABB
:1071F000809100018A3011F4289801C0289AAA24AD
:10720000BB2400E010E088249924EE24FF246624A7
:107210007724CC24DD2462E3462E55248091BB07DD
:107220009091BC07081719072CF40091BB07109127
:10723000BC070BC08091BB079091BC078A159B05CA
:1072400024F4A090BB07B090BC078091BD0790913B
:10725000BE07E816F9062CF4E090BD07F090BE07D3
:107260000BC08091BD079091BE078815990524F445
:107270008090BD079090BE078091BF079091C00796
:10728000C816D9062CF4C090BF07D090C0070BC019
:107290008091BF079091C0078615970524F46090F0
:1072A000BF077090C007552081F485B191E0892710
:1072B00085B985B192E0892785B982E390E0909302
:1072C000C1038093C00352E3552E8AE090E00E94F0
:1072D000CF0CEC01CE010E94D80C8823D9F3E091A9
:1072E0003307FF27EE0FFF1FEB5FF84F808191817F
:1072F000843691050CF44A94442011F05A948ECFB0
:10730000C8018A199B099093B2078093B107C701FE
:10731000881999099093B4078093B307C601861919
:1073200097099093B6078093B507EEEAF7E0C80196
:107330008A0D9B1D62E070E00E94953C6093AE0751
:10734000C701880D991D62E070E00E94953C609332
:10735000AF07C601860D971D62E070E00E94953C64
:107360006093B00789E0A8E6B1E0182E0E943B3D8B
:10737000E0E1CDB7DEB70C94033D83ED8CBD84B165
:10738000846A84B95B9885E08093BA071092B70746
:1073900089E0EEEAF7E0A8E6B1E0182E0E942A3D67
:1073A00008951F93CF93DF93EC01892B31F461157E
:1073B000710519F480E090E08EC077FD02C011E005
:1073C00001C01FEF209729F48AE51802C00111249B
:1073D00082C0882777FD8095982F22E330E040E037
:1073E00050E00E94563C9E01442737FD4095542FA3
:1073F0000E94CA3CF90137FF03C0F095E195FF4FA9
:1074000041E0EE30F40734F4E55FFA4F8491282F21
:10741000332747C056E1E737F5071CF02AE530E08F
:1074200040C087E0E637F8071CF029E530E039C0B6
:1074300044E0EE37F4071CF028E530E032C053E0BA
:10744000E433F5071CF027E530E02BC082E0E0389C
:10745000F8071CF026E530E024C042E0E830F407ED
:107460001CF025E530E01DC051E0E83BF5071CF0BD
:1074700024E530E016C081E0EC37F8071CF023E586
:1074800030E00FC041E0EF34F4071CF022E530E0BB
:1074900008C0EB52F1401CF021E530E002C020E5CD
:1074A00030E01C161D066CF4812F992787FD9095FE
:1074B000AC01249FC001259F900D349F900D112495
:1074C0000AC011162CF484EB90E0821B930B03C0CE
:1074D000C901845B9040DF91CF911F910895FC0119
:1074E00025913491FC01329645915491CA01B9011C
:1074F0000895A0E0B0E0EFE7FAE30C94EF3C9C01C4
:1075000097FD04C041E0C42ED12C06C030952195D2
:107510003F4F9FEFC92ED92E2B3531055CF0C901A5
:107520008B5590408A35910540F484EB90E0821BA6
:10753000930B9C01C1E0D0E010C0C901855B904075
:107540008A35910518F4245B304005C088E691E047
:10755000821B930B9C01CFEFDFEF220F331F220F13
:10756000331FC901875E994F0E946F3A7B018C01DE
:10757000B601882777FD8095982F0E94943B9B0148
:10758000AC01C801B7010E940E3C7B018C01BE0119
:10759000882777FD8095982F0E94943B9B01AC0132
:1075A000C801B7010E940E3CE8E0CDB7DEB70C94ED
:1075B0000B3D2AE530E0281B390BC9010E94793ABE
:1075C0000895FC014150504030F001900616D1F76B
:1075D0003197CF0108958827992708955058192E7B
:1075E000EFD001D0D2C0BA1762077307840795079E
:1075F000B1F188F40EF410940B2EBA2FA02D062EA4
:10760000622F202D072E732F302D082E842F402D12
:10761000092E952F502DFF275523B9F0591B49F0FE
:10762000573E98F0469537952795A795F040539586
:10763000C9F776F0BA0F621F731F841F30F4879565
:1076400077956795B795F040939517FA0F2E0895A3
:10765000BF1BBB27BA0B620B730B840BF6CFDEF696
:10766000DBC0AED001D091C0552359F0992369F009
:107670009F575F57951B33F442F4903811F491589B
:1076800005C09BC091589F3F09F4C6C0BB27112479
:1076900062177307840730F4660F771F881FBB1FBC
:1076A000915098F311D00F920FD00F920DD0A0E807
:1076B0002617370748071B0609F0A048BA2F602D88
:1076C0007F918F9100240895A0E80024621773072A
:1076D0008407B10528F0621B730B840BB1090A2AD9
:1076E000660F771F881FBB1FA69581F7089597FB2C
:1076F00073D09F3738F0FEE9F91B982F872F762F2C
:107700006B2F05C086C09695879577956795F15044
:10771000D0F73EF490958095709561957F4F8F4F8F
:107720009F4F0895E89403C097FB0EF4F3DFB62F44
:10773000672F782F892F9EE9002427C00ED05EF096
:1077400004C00BD026F001C008D019F020F48FEF50
:10775000089580E0089581E0089597FB092E05269D
:1077600000F8689430D0E89407FC07C062177307EC
:107770008407950721F008F40094079498940895DD
:107780009A95BB0F661F771F881F11249923A1F0BC
:107790008823B2F79F3F59F0BB0F48F421F4002033
:1077A00011F460FF04C06F5F7F4F8F4F9F4F881FA2
:1077B0009795879597F908952CC09FEF80EC0895D1
:1077C000052E092607FA440F551F5F3F79F0AA27B7
:1077D000A51708F051E04795880F991F9F3F31F09A
:1077E000BB27B91708F091E0879508959F919F9165
:1077F0001124E3CF97FB880F991F9F3F31F0BB27E0
:10780000B91708F091E0879508959F919F911124F1
:10781000D4CF66277727882799270895D1DF01D00D
:10782000B4CF992339F0552329F09F575F57950F0F
:1078300013F49AF1F1CF91589F3FE1F3629FA12D8C
:107840000F92BB27639FA00DB11DEE27729FA00D65
:10785000B11DEE1FAF93AA27649FB00DE11D739F6A
:10786000B00DE11DAA1F6627829FB00DE11DA61F66
:107870005527749FE00DA11D551F839FE00DA11D8D
:10788000561F849FA00D511D852F7A2F6E2F1F909C
:107890000F9088231AF4939539F48FCF000C111CA4
:1078A000BB1F661F771F881F01280895629FD001A4
:1078B000739FF001829FE00DF11D649FE00DF11DAB
:1078C000929FF00D839FF00D749FF00D659FF00D5A
:1078D0009927729FB00DE11DF91F639FB00DE11D47
:1078E000F91FBD01CF0111240895991B79E004C04F
:1078F000991F961708F0961B881F7A95C9F78095EF
:107900000895AA1BBB1B51E107C0AA1FBB1FA617E6
:10791000B70710F0A61BB70B881F991F5A95A9F738
:1079200080959095BC01CD01089597FB092E0726FF
:107930000AD077FD04D0E5DF06D000201AF4709558
:1079400061957F4F0895F6F7909581959F4F089523
:10795000A1E21A2EAA1BBB1BFD010DC0AA1FBB1F53
:10796000EE1FFF1FA217B307E407F50720F0A21BC5
:10797000B30BE40BF50B661F771F881F991F1A9432
:1079800069F760957095809590959B01AC01BD015C
:10799000CF01089597FB092E05260ED057FD04D080
:1079A000D7DF0AD0001C38F45095409530952195CA
:1079B0003F4F4F4F5F4F0895F6F790958095709524
:1079C00061957F4F8F4F9F4F08952F923F924F9217
:1079D0005F926F927F928F929F92AF92BF92CF925F
:1079E000DF92EF92FF920F931F93CF93DF93CDB768
:1079F000DEB7CA1BDB0B0FB6F894DEBF0FBECDBFE0
:107A000009942A88398848885F846E847D848C84B0
:107A10009B84AA84B984C884DF80EE80FD800C81B9
:107A20001B81AA81B981CE0FD11D0FB6F894DEBF9C
:107A30000FBECDBFED010895EE0FFF1F0590F4912D
:107A4000E02D0994F999FECFB2BDA1BDF89A119627
:107A500000B40895F7DF01921A94E1F70895F999B7
:107A6000FECFB2BDA1BD00BC11960FB6F894FA9A34
:107A7000F99A0FBE08950190F2DF1A94E1F7089584
:027A8000FFCF36
:107A82000A01FF64496E74656772616C4E69636BCB
:107A920020202020496E74656772616C526F6C6C95
:107AA200202020204163634E69636B202020202028
:107AB20020202020416363526F6C6C202020202004
:107AC200202020204779726F47696572202020208C
:107AD20020202020486F6568656E576572742020EB
:107AE200202020204163635A2020202020202020B3
:107AF20020202020476173202020202020202020C9
:107B0200202020204B6F6D7061737356616C756518
:107B1200202020205370616E6E756E672020202019
:107B220020202020456D7066616E67202020202075
:107B320020202020416E616C6F673131202020208F
:107B4200202020204D6F746F725F566F726E652019
:107B5200202020204D6F746F725F48696E74656ECD
:107B6200202020204D6F746F725F4C696E6B732002
:107B7200202020204D6F746F725F526563687473AA
:107B8200202020204163635F5A20202020202020D3
:107B9200202020204D697474656C4163634E6963D3
:107BA2006B2020204D697474656C416363526F6C65
:107BB2006C202020496E74656772616C4572724E4A
:107BC20069636B20496E74656772616C45727252AB
:107BD2006F6C6C204D697474656C496E744E696388
:107BE2006B2020204D697474656C496E74526F6C01
:107BF2006C0920004E65757472616C4E69636B206E
:107C020020202020526F6C6C4F66667365742020B2
:107C120020202020496E74526F6C6C2A46616B746E
:107C22006F722020416E616C6F67323620202020F7
:107C320020202020446972656B74417573676C5211
:107C42006F6C6C204D65737377657274526F6C6CD8
:107C520020202020417573676C65696368526F6CE0
:107C62006C202020492D4C616765526F6C6C20207E
:107C720020202020537469636B526F6C6C2020208B
:107C820020202020FFFF0A016400007D0000FF0386
:107C92000102030405060708090A48616C6C6F209B
:107CA20057656C7400000000000000000000000036
:107CB20000000000000000000000000000000000C2
:107CC20000000000000000000000000000000000B2
:107CD20000000000000000000000000000000000A2
:107CE200000000000000000000000C01426567690E
:107CF2006E6E657200004E6F726D616C00005370A3
:107D02006F72740000640090D0030090D0030017DB
:107D1200B7D13830FB103A409696020A644664ECBA
:027D2200FF0060
:00000001FF
/branches/v0.60_MicroMag3_Nick666/V0.67g/FlightCtrl.aps
0,0 → 1,0
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>11-Oct-2007 22:58:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\MikroKopter\FlightCtrl\branches\V0.64_ZeroWarnings\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>uart.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>timer0.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>fc.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>fc.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>TWIMASTER.C</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>uart.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>analog.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>gps.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>main.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>rc.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>Settings.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>timer0.h</FileName><Status>1</Status></File00018></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
/branches/v0.60_MicroMag3_Nick666/V0.67g/GPS.c
0,0 → 1,30
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
signed int GPS_Nick = 0;
signed int GPS_Roll = 0;
long GpsAktuell_X = 0;
long GpsAktuell_Y = 0;
long GpsZiel_X = 0;
long GpsZiel_Y = 0;
void GPS_Neutral(void)
{
GpsZiel_X = GpsAktuell_X;
GpsZiel_Y = GpsAktuell_Y;
}
 
void GPS_BerechneZielrichtung(void)
{
GPS_Nick = 0;
GPS_Roll = 0;
}
 
 
 
 
/branches/v0.60_MicroMag3_Nick666/V0.67g/License.txt
0,0 → 1,52
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-profit use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet, our webpage (http://www.MikroKopter.de) must be
// + clearly linked and named as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/branches/v0.60_MicroMag3_Nick666/V0.67g/Settings.h
--- V0.67g/_Settings.h (nonexistent)
+++ V0.67g/_Settings.h (revision 554)
@@ -0,0 +1,50 @@
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Testmodi
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define MOTOR_OFF 0
+#define MOTOR_TEST 0
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Abstimmung
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define ACC_AMPLIFY 12
+#define FAKTOR_P 1
+#define FAKTOR_I 0.0001
+
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debug-Interface
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein?
+#define MIN_DEBUG_INTERVALL 500 // in diesem Intervall werden Degugdaten ohne Aufforderung gesendet
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Sender
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ #define K_NICK 0
+ #define K_ROLL 1
+ #define K_GAS 2
+ #define K_GIER 3
+ #define K_POTI1 4
+ #define K_POTI2 5
+ #define K_POTI3 6
+ #define K_POTI4 7
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Kamera
+// Stick_P:3
+// Stick_D:0
+// Gyro_P: 175
+// Gyro_I: 175
+// Ki_Anteil: 10
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Normal
+// Stick_P:2
+// Stick_D:8
+// Gyro_P: 80
+// Gyro_I: 150
+// Ki_Anteil: 5
+
/branches/v0.60_MicroMag3_Nick666/V0.67g/analog.c
0,0 → 1,147
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE);
//Free Running Mode, Division Factor 128, Interrupt on
}
 
void SucheLuftruckOffset(void)
{
unsigned int off;
off = eeprom_read_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET]);
if(off > 20) off -= 10;
OCR0A = off;
Delay_ms_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;
//AdWertNick = 0;
//AdWertNick += Poti2;
kanal = 5;
break;
case 9:
AdWertAccHoch = (signed int) ADC - NeutralAccZ;
AdWertAccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4;
if(AdWertAccHoch > 1)
{
if(NeutralAccZ < 800) NeutralAccZ+= 0.02;
}
else if(AdWertAccHoch < -1)
{
if(NeutralAccZ > 600) NeutralAccZ-= 0.02;
}
messanzahl_AccHoch = 1;
Aktuell_az = ADC;
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen
kanal = 3;
break;
case 10:
tmpLuftdruck += ADC;
if(++messanzahl_Druck >= 5)
{
MessLuftdruck = ADC;
messanzahl_Druck = 0;
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4;
HoehenWert = StartLuftdruck - Luftdruck;
tmpLuftdruck = 0;
}
kanal = 0;
state = 0;
break;
default:
kanal = 0;
state = 0;
break;
}
ADMUX = kanal;
if(state != 0) ANALOG_ON;
}
/branches/v0.60_MicroMag3_Nick666/V0.67g/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<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE)
/branches/v0.60_MicroMag3_Nick666/V0.67g/compass.c
0,0 → 1,240
/*
 
Copyright 2007, Niklas Nold
 
This program (files compass.c and compass.h) is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation;
either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
 
Please note: All the other files for the project "Mikrokopter" by H. Buss are under the license (license_buss.txt) published by www.mikrokopter.de
*/
 
#include "main.h"
 
struct MM3_calib_struct ee_calib EEMEM; // Reservierung im EEPROM
 
struct MM3_working_struct MM3;
struct MM3_calib_struct MM3_calib;
 
 
//############################################################################
// Initialisierung
void init_MM3(void)
//############################################################################
{
// SPI-Schnittstelle initialisieren
SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0); // Interrupt an, Master, 156 kHz Oszillator
 
DDRB |= (1<<PB7)|(1<<PB5)|(1<<PB2); // J8, MOSI, SCK Ausgang
PORTD &= ~(1<<PD3); // J5 permanent auf Low
// Init Statemachine
MM3.AXIS = MM3_X;
MM3.STATE = MM3_RESET;
// Kalibrierung aus dem EEprom lesen
eeprom_read_block(&MM3_calib,&ee_calib,sizeof(struct MM3_calib_struct));
}
 
 
//############################################################################
// Wird in der SIGNAL (SIG_OVERFLOW0) aufgerufen
void timer0_MM3(void)
//############################################################################
{
switch (MM3.STATE)
{
case MM3_RESET:
PORTB |= (1<<PB2); // J8 auf High, MM3 Reset
MM3.STATE = MM3_START_TRANSFER;
return;
case MM3_START_TRANSFER:
PORTB &= ~(1<<PB2); // J8 auf Low (war ~125 µs auf High)
if (MM3.AXIS == MM3_X) SPDR = 0x31; // Schreiben ins SPDR löst automatisch SPI-Übertragung (MOSI und MISO) aus
else if (MM3.AXIS == MM3_Y) SPDR = 0x32; // Micromag Period Select ist auf 256 (0x30)
else SPDR = 0x33; //if (MM3.AXIS == MM3_Z) // 1: x-Achse, 2: Y-Achse, 3: Z-Achse
MM3.DRDY = SetDelay(8); // Laut Datenblatt max. Zeit bis Messung fertig (bei PS 256 eigentlich 4 ms)
MM3.STATE = MM3_WAIT_DRDY;
return;
case MM3_WAIT_DRDY:
if (CheckDelay(MM3.DRDY)) {SPDR = 0x00;MM3.STATE = MM3_DRDY;} // Irgendwas ins SPDR, damit Übertragung ausgelöst wird, wenn Wartezeit vorbei
return; // Jetzt gehts weiter in SIGNAL (SIG_SPI)
}
}
 
 
//############################################################################
// SPI byte ready
SIGNAL (SIG_SPI)
//############################################################################
{
static char tmp;
int wert;
 
switch (MM3.STATE)
{
case MM3_DRDY: // 1. Byte ist da, zwischenspeichern
tmp = SPDR;
SPDR = 0x00; // Übertragung von 2. Byte auslösen
MM3.STATE = MM3_BYTE2;
return;
case MM3_BYTE2: // 2. Byte der entsprechenden Achse ist da
wert = tmp;
wert <<= 8; // 1. Byte an MSB-Stelle rücken
wert |= SPDR; // 2. Byte dranpappen
if(abs(wert) < Max_Axis_Value) // Spikes filtern. Zuweisung nur, wenn Max-Wert nicht überschritten
switch (MM3.AXIS)
{
case MM3_X:
MM3.x_axis = wert;
MM3.AXIS = MM3_Y;
break;
case MM3_Y:
MM3.y_axis = wert;
MM3.AXIS = MM3_Z;
break;
default: //case MM3_Z:
MM3.z_axis = wert;
MM3.AXIS = MM3_X;
}
MM3.STATE = MM3_RESET;
}
}
 
//############################################################################
// Kompass kalibrieren
void calib_MM3(void)
//############################################################################
{
signed int x_min=0,x_max=0,y_min=0,y_max=0,z_min=0,z_max=0;
uint8_t measurement=50,beeper=0;
unsigned int timer;
GRN_ON;
ROT_OFF;
while (measurement)
{
//H_earth = MM3.x_axis*MM3.x_axis + MM3.y_axis*MM3.y_axis + MM3.z_axis*MM3.z_axis;
if (MM3.x_axis > x_max) x_max = MM3.x_axis;
else if (MM3.x_axis < x_min) x_min = MM3.x_axis;
if (MM3.y_axis > y_max) y_max = MM3.y_axis;
else if (MM3.y_axis < y_min) y_min = MM3.y_axis;
if (MM3.z_axis > z_max) z_max = MM3.z_axis;
else if (MM3.z_axis < z_min) z_min = MM3.z_axis;
if (!beeper)
{
ROT_FLASH;
GRN_FLASH;
beeptime = 50;
beeper = 50;
}
beeper--;
// Schleife mit 100 Hz
timer = SetDelay(10);
while(!CheckDelay(timer));
// Wenn Gas zurück genommen wird, Kalibrierung mit 1/2 Sekunde Verzögerung beenden
if (PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < 100) measurement--;
}
// Wertebereich der Achsen
MM3_calib.X_range = (x_max - x_min);
MM3_calib.Y_range = (y_max - y_min);
MM3_calib.Z_range = (z_max - z_min);
// Offset der Achsen
MM3_calib.X_off = (x_max + x_min) / 2;
MM3_calib.Y_off = (y_max + y_min) / 2;
MM3_calib.Z_off = (z_max + z_min) / 2;
 
// und im EEProm abspeichern
eeprom_write_block(&MM3_calib,&ee_calib,sizeof(struct MM3_calib_struct));
}
 
 
//############################################################################
// Neigungskompensierung und Berechnung der Ausrichtung
signed int heading_MM3(void)
//############################################################################
{
float sin_nick, cos_nick, sin_roll, cos_roll;
float x_corr, y_corr;
signed int x_axis,y_axis,z_axis,heading;
signed int nicktilt,rolltilt;
unsigned int div_faktor;
div_faktor = (uint16_t)EE_Parameter.UserParam3 * 8;
// Berechung von sinus und cosinus
nicktilt = (IntegralNick/div_faktor);
sin_nick = sin_f(nicktilt);
cos_nick = cos_f(nicktilt);
rolltilt = (IntegralRoll/div_faktor);
sin_roll = sin_f(rolltilt);
cos_roll = cos_f(rolltilt);
// Offset
x_axis = (MM3.x_axis - MM3_calib.X_off);
y_axis = (MM3.y_axis - MM3_calib.Y_off);
z_axis = (MM3.z_axis - MM3_calib.Z_off);
 
// Normierung Wertebereich
if ((MM3_calib.X_range > MM3_calib.Y_range) && (MM3_calib.X_range > MM3_calib.Z_range))
{
y_axis = ((long)y_axis * MM3_calib.X_range) / MM3_calib.Y_range;
z_axis = ((long)z_axis * MM3_calib.X_range) / MM3_calib.Z_range;
}
else if ((MM3_calib.Y_range > MM3_calib.X_range) && (MM3_calib.Y_range > MM3_calib.Z_range))
{
x_axis = ((long)x_axis * MM3_calib.Y_range) / MM3_calib.X_range;
z_axis = ((long)z_axis * MM3_calib.Y_range) / MM3_calib.Z_range;
}
else //if ((MM3_calib.Z_range > MM3_calib.X_range) && (MM3_calib.Z_range > MM3_calib.Y_range))
{
x_axis = ((long)x_axis * MM3_calib.Z_range) / MM3_calib.X_range;
y_axis = ((long)y_axis * MM3_calib.Z_range) / MM3_calib.Y_range;
}
 
// Neigungskompensation
x_corr = x_axis * cos_nick;
x_corr += y_axis * sin_roll * sin_nick;
x_corr -= z_axis * cos_roll * sin_nick;
y_corr = y_axis * cos_roll;
y_corr += z_axis * sin_roll;
// Winkelberechnung
heading = atan2_i(x_corr, y_corr);
if (heading < 0) heading = -heading;
else heading = 360 - heading;
/*
if (!x_corr && y_corr <0) return (90);
if (!x_corr && y_corr >0) return (270);
heading = atan(y_corr/x_corr)*57.29578;
if (x_corr < 0) heading = 180-heading;
if (x_corr > 0 && y_corr < 0) heading = -heading;
if (x_corr > 0 && y_corr > 0) heading = 360 - heading;
*/
return (heading);
}
/branches/v0.60_MicroMag3_Nick666/V0.67g/compass.h
0,0 → 1,44
 
 
struct MM3_working_struct
{
uint8_t STATE;
unsigned int DRDY;
uint8_t AXIS;
volatile signed int x_axis;
volatile signed int y_axis;
volatile signed int z_axis;
};
 
 
struct MM3_calib_struct
{
int8_t X_off;
int8_t Y_off;
int8_t Z_off;
uint16_t X_range;
uint16_t Y_range;
uint16_t Z_range;
};
 
extern struct MM3_working_struct MM3;
extern struct MM3_calib_struct MM3_calib;
 
void init_MM3(void);
void timer0_MM3(void);
void calib_MM3(void);
signed int heading_MM3(void);
 
#define Max_Axis_Value 500
 
// Die Werte der Statemachine
#define MM3_RESET 0
#define MM3_START_TRANSFER 1
#define MM3_WAIT_DRDY 2
#define MM3_DRDY 3
#define MM3_BYTE2 4
#define MM3_X 5
#define MM3_Y 6
#define MM3_Z 7
#define MM3_TILT 8
#define MM3_IDLE 9
/branches/v0.60_MicroMag3_Nick666/V0.67g/eeprom.c
0,0 → 1,182
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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 = 32;
EE_Parameter.UserParam1 = 32 * 4; //zur freien Verwendung
EE_Parameter.UserParam2 = 0; //zur freien Verwendung
EE_Parameter.UserParam3 = 0; //zur freien Verwendung
EE_Parameter.UserParam4 = 0; //zur freien Verwendung
EE_Parameter.UserParam5 = 0; // zur freien Verwendung
EE_Parameter.UserParam6 = 0; // zur freien Verwendung
EE_Parameter.UserParam7 = 0; // zur freien Verwendung
EE_Parameter.UserParam8 = 0; // zur freien Verwendung
EE_Parameter.ServoNickControl = 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 = 10;
EE_Parameter.WinkelUmschlagNick = 100;
EE_Parameter.WinkelUmschlagRoll = 100;
EE_Parameter.GyroAccAbgleich = 50; // 1/k
EE_Parameter.Driftkomp = 4;
EE_Parameter.DynamicStability = 100;
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 = 32;
EE_Parameter.UserParam1 = 20 * 4; // zur freien Verwendung
EE_Parameter.UserParam2 = 0; // zur freien Verwendung
EE_Parameter.UserParam3 = 0; // zur freien Verwendung
EE_Parameter.UserParam4 = 0; // zur freien Verwendung
EE_Parameter.UserParam5 = 0; // zur freien Verwendung
EE_Parameter.UserParam6 = 0; // zur freien Verwendung
EE_Parameter.UserParam7 = 0; // zur freien Verwendung
EE_Parameter.UserParam8 = 0; // zur freien Verwendung
EE_Parameter.ServoNickControl = 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 = 10;
EE_Parameter.WinkelUmschlagNick = 100;
EE_Parameter.WinkelUmschlagRoll = 100;
EE_Parameter.GyroAccAbgleich = 100; // 1/k
EE_Parameter.Driftkomp = 4;
EE_Parameter.DynamicStability = 75;
memcpy(EE_Parameter.Name, "Normal\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_DREHRATEN_BEGRENZER | CFG_ACHSENKOPPLUNG_AKTIV;///*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 = 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 = 10;
EE_Parameter.UserParam1 = 20 * 4; // zur freien Verwendung
EE_Parameter.UserParam2 = 0; // zur freien Verwendung
EE_Parameter.UserParam3 = 0; // zur freien Verwendung
EE_Parameter.UserParam4 = 0; // zur freien Verwendung
EE_Parameter.UserParam5 = 0; // zur freien Verwendung
EE_Parameter.UserParam6 = 0; // zur freien Verwendung
EE_Parameter.UserParam7 = 0; // zur freien Verwendung
EE_Parameter.UserParam8 = 0; // zur freien Verwendung
EE_Parameter.ServoNickControl = 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 = 10;
EE_Parameter.WinkelUmschlagNick = 100;
EE_Parameter.WinkelUmschlagRoll = 100;
EE_Parameter.GyroAccAbgleich = 100; // 1/k
EE_Parameter.Driftkomp = 4;
EE_Parameter.DynamicStability = 50;
memcpy(EE_Parameter.Name, "Beginner\0", 12);
}
/branches/v0.60_MicroMag3_Nick666/V0.67g/fc.c
0,0 → 1,1149
/*#######################################################################################
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;
int MesswertNick,MesswertRoll,MesswertGier;
int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0;
int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch;
 
volatile int NeutralAccX=0, NeutralAccY=0;
volatile float NeutralAccZ = 0;
 
long IntegralNick = 0,IntegralNick2 = 0;
long IntegralRoll = 0,IntegralRoll2 = 0;
long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0;
long Integral_Gier = 0;
 
long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2;
long Mess_Integral_Hoch = 0;
 
int KompassValue = 0;
int KompassStartwert = 0;
int KompassRichtung = 0;
uint8_t updKompass = 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 LageKorrekturRoll = 0,LageKorrekturNick = 0;
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_UserParam5 = 0;
unsigned char Parameter_UserParam6 = 0;
unsigned char Parameter_UserParam7 = 0;
unsigned char Parameter_UserParam8 = 0;
unsigned char Parameter_ServoNickControl = 100;
unsigned char Parameter_LoopGasLimit = 70;
unsigned char Parameter_AchsKopplung1 = 0;
unsigned char Parameter_AchsGegenKopplung1 = 0;
unsigned char Parameter_DynamicStability = 100;
struct mk_param_struct EE_Parameter;
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20;
 
void Piep(unsigned char Anzahl)
{
while(Anzahl--)
{
if(MotorenEin) return; //auf keinen Fall im Flug!
beeptime = 100;
Delay_ms(250);
}
}
 
/*
//############################################################################
// Neutrallage kalibrieren und fest im EEPROM abspeichern
void calib_acc(void)
//############################################################################
{
unsigned int timer;
acc_neutral.X = 0;
acc_neutral.Y = 0;
acc_neutral.Z = 0;
CalibrierMittelwert();
timer = SetDelay(5);
while (!CheckDelay(timer));
CalibrierMittelwert();
acc_neutral.X = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
acc_neutral.Y = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
acc_neutral.Z = Aktuell_az;
eeprom_write_block(&acc_neutral,&ee_acc_neutral,sizeof(struct acc_neutral_struct));
}
*/
 
//############################################################################
// 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;
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4)
{
NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
NeutralAccZ = Aktuell_az;
}
else
{
NeutralAccX = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1]);
NeutralAccY = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL+1]);
NeutralAccZ = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_Z]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_Z+1]);
}
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;
ExternHoehenValue = 0;
}
 
//############################################################################
// 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 - 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 - LageKorrekturRoll;
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 - LageKorrekturNick;
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;
//++++++++++++++++++++++++++++++++++++++++++++++++
 
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_UserParam5,EE_Parameter.UserParam5,0,255);
CHK_POTI(Parameter_UserParam6,EE_Parameter.UserParam6,0,255);
CHK_POTI(Parameter_UserParam7,EE_Parameter.UserParam7,0,255);
CHK_POTI(Parameter_UserParam8,EE_Parameter.UserParam8,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);
CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability,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 > MAX_GAS - 20) GasMischanteil = MAX_GAS - 20;
if(GasMischanteil < 0) GasMischanteil = 0;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Emfang schlecht
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay < 100)
{
if(!PcZugriff)
{
if(BeepMuster == 0xffff)
{
beeptime = 15000;
BeepMuster = 0x0c00;
}
}
if(RcLostTimer) RcLostTimer--;
else
{
MotorenEin = 0;
Notlandung = 0;
}
ROT_ON;
if(modell_fliegt > 2000) // wahrscheinlich in der Luft --> langsam absenken
{
GasMischanteil = EE_Parameter.NotGas;
Notlandung = 1;
PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
}
else MotorenEin = 0;
}
else
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Emfang gut
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay > 140)
{
Notlandung = 0;
RcLostTimer = EE_Parameter.NotGasZeit * 50;
if(GasMischanteil > 40)
{
if(modell_fliegt < 0xffff) modell_fliegt++;
}
if((modell_fliegt < 200) || (GasMischanteil < 40))
{
SummeNick = 0;
SummeRoll = 0;
Mess_Integral_Gier = 0;
Mess_Integral_Gier2 = 0;
}
if((GasMischanteil > 200) && MotorenEin == 0)
{
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// auf Nullwerte kalibrieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte
{
if(++delay_neutral > 200) // nicht sofort
{
GRN_OFF;
MotorenEin = 0;
delay_neutral = 0;
modell_fliegt = 0;
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
{
unsigned char setting=1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken
}
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
{
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
}
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], sizeof(struct mk_param_struct));
SetNeutral();
Piep(GetActiveParamSetNumber());
}
}
else
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern
{
if(++delay_neutral > 200) // nicht sofort
{
GRN_OFF;
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK],0xff); // Werte löschen
MotorenEin = 0;
delay_neutral = 0;
modell_fliegt = 0;
SetNeutral();
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK],NeutralAccX / 256); // ACC-NeutralWerte speichern
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1],NeutralAccX % 256); // ACC-NeutralWerte speichern
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL],NeutralAccY / 256);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_ROLL+1],NeutralAccY % 256);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_Z],(int)NeutralAccZ / 256);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACC_Z+1],(int)NeutralAccZ % 256);
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)
{
int tmp_int;
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;
 
#define KEY_VALUE (Parameter_UserParam1 * 4) //(Poti3 * 8)
if(DubWiseKeys[1]) beeptime = 10;
if(DubWiseKeys[1] & DUB_KEY_UP) tmp_int = KEY_VALUE; else
if(DubWiseKeys[1] & DUB_KEY_DOWN) tmp_int = -KEY_VALUE; else tmp_int = 0;
ExternStickNick = (ExternStickNick * 7 + tmp_int) / 8;
if(DubWiseKeys[1] & DUB_KEY_LEFT) tmp_int = KEY_VALUE; else
if(DubWiseKeys[1] & DUB_KEY_RIGHT) tmp_int = -KEY_VALUE; else tmp_int = 0;
ExternStickRoll = (ExternStickRoll * 7 + tmp_int) / 8;
 
if(DubWiseKeys[0] & 8) ExternStickGier = 50;else
if(DubWiseKeys[0] & 4) ExternStickGier =-50;else ExternStickGier = 0;
if(DubWiseKeys[0] & 2) ExternHoehenValue++;
if(DubWiseKeys[0] & 16) ExternHoehenValue--;
 
StickNick += ExternStickNick / 8;
StickRoll += ExternStickRoll / 8;
StickGier += ExternStickGier;
 
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;
LageKorrekturNick = 0;
LageKorrekturRoll = 0;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!Looping_Nick && !Looping_Roll)
{
long tmp_long, tmp_long2;
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick);
tmp_long /= 16;
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll);
tmp_long2 /= 16;
#define AUSGLEICH 32 //(Parameter_UserParam1 / 2)
if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH;
if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH;
if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH;
if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH;
Mess_IntegralNick -= tmp_long;
Mess_IntegralRoll -= tmp_long2;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
if(ZaehlMessungen >= ABGLEICH_ANZAHL)
{
static int cnt = 0;
static char last_n_p,last_n_n,last_r_p,last_r_n;
static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt;
if(!Looping_Nick && !Looping_Roll)
{
MittelIntegralNick /= ABGLEICH_ANZAHL;
MittelIntegralRoll /= ABGLEICH_ANZAHL;
IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL;
IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL;
IntegralAccZ = IntegralAccZ / ABGLEICH_ANZAHL;
#define MAX_I 0//(Poti2/10)
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++
IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick);
ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich;
LageKorrekturNick = ausgleichNick / ABGLEICH_ANZAHL;
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++
IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll);
ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich;
LageKorrekturRoll = ausgleichRoll / ABGLEICH_ANZAHL;
 
// 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);
tmp_long = IntegralNick2 - IntegralNick;
tmp_long2 = IntegralRoll2 - IntegralRoll;
//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[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;
DebugOut.Analog[30] = LageKorrekturRoll * 10;
 
#define FEHLER_LIMIT (ABGLEICH_ANZAHL * 4)
#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL * 16)
#define BEWEGUNGS_LIMIT 20000
// Nick +++++++++++++++++++++++++++++++++++++++++++++++++
cnt = 1;// + labs(IntegralFehlerNick) / 4096;
if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < BEWEGUNGS_LIMIT)
{
if(IntegralFehlerNick > FEHLER_LIMIT2)
{
if(last_n_p)
{
cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2;
ausgleichNick = IntegralFehlerNick / 8;
if(ausgleichNick > 5000) ausgleichNick = 5000;
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
}
else last_n_p = 1;
} else last_n_p = 0;
if(IntegralFehlerNick < -FEHLER_LIMIT2)
{
if(last_n_n)
{
cnt += labs(IntegralFehlerNick) / FEHLER_LIMIT2;
ausgleichNick = IntegralFehlerNick / 8;
if(ausgleichNick < -5000) ausgleichNick = -5000;
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL;
}
else last_n_n = 1;
} else last_n_n = 0;
} else cnt = 0;
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt;
if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt;
 
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++
cnt = 1;// + labs(IntegralFehlerNick) / 4096;
 
ausgleichRoll = 0;
if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < BEWEGUNGS_LIMIT)
{
if(IntegralFehlerRoll > FEHLER_LIMIT2)
{
if(last_r_p)
{
cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2;
ausgleichRoll = IntegralFehlerRoll / 8;
if(ausgleichRoll > 5000) ausgleichRoll = 5000;
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL;
}
else last_r_p = 1;
} else last_r_p = 0;
if(IntegralFehlerRoll < -FEHLER_LIMIT2)
{
if(last_r_n)
{
cnt += labs(IntegralFehlerRoll) / FEHLER_LIMIT2;
ausgleichRoll = IntegralFehlerRoll / 8;
if(ausgleichRoll < -5000) ausgleichRoll = -5000;
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL;
}
else last_r_n = 1;
} else last_r_n = 0;
} else
{
cnt = 0;
}
DebugOut.Analog[27] = ausgleichRoll;
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp;
//if(cnt > 1) beeptime = 50;
if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt;
if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt;
DebugOut.Analog[23] = AdNeutralNick;//10*(AdNeutralNick - StartNeutralNick);
DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll);
}
else
{
LageKorrekturRoll = 0;
LageKorrekturNick = 0;
}
if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
MittelIntegralNick_Alt = MittelIntegralNick;
MittelIntegralRoll_Alt = MittelIntegralRoll;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++
IntegralAccNick = 0;
IntegralAccRoll = 0;
IntegralAccZ = 0;
MittelIntegralNick = 0;
MittelIntegralRoll = 0;
MittelIntegralNick2 = 0;
MittelIntegralRoll2 = 0;
ZaehlMessungen = 0;
}
//DebugOut.Analog[31] = StickRoll / (26*IntegralFaktor);
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(abs(StickGier) > 20) // war 35
{
if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1;
}
tmp_int = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx²
tmp_int += (EE_Parameter.Gier_P * StickGier) / 4;
sollGier = tmp_int;
Mess_Integral_Gier -= tmp_int;
if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen
if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Kompass
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)
{
int w,v;
 
if (!updKompass--) // Aufruf mit ~10 Hz
{
KompassValue = heading_MM3();
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
updKompass = 50;
}
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 < 35 && NeueKompassRichtungMerken)
{
KompassStartwert = KompassValue;
NeueKompassRichtungMerken = 0;
}
w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren
w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln
if(w > 0)
{
Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten
}
else beeptime = 100;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// 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;
 
DebugOut.Analog[28] = MesswertRoll;
DebugOut.Analog[25] = IntegralRoll * IntegralFaktor;
DebugOut.Analog[31] = StickRoll;// / (26*IntegralFaktor);
 
// Maximalwerte abfangen
#define MAX_SENSOR 2048
if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR;
if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR;
if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR;
if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR;
if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR;
if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Höhenregelung
// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//OCR0B = 180 - (Poti1 + 120) / 4;
//DruckOffsetSetting = OCR0B;
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung
{
int tmp_int;
if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert
{
if(Parameter_MaxHoehe < 50)
{
SollHoehe = HoehenWert - 20; // Parameter_MaxHoehe ist der PPM-Wert des Schalters
HoehenReglerAktiv = 0;
}
else
HoehenReglerAktiv = 1;
}
else
{
SollHoehe = ((int) ExternHoehenValue + (int) Parameter_MaxHoehe) * (int)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 > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2;
if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2);
if(GierMischanteil > ((MAX_GAS - GasMischanteil))) GierMischanteil = ((MAX_GAS - GasMischanteil));
if(GierMischanteil < -((MAX_GAS - GasMischanteil))) GierMischanteil = -((MAX_GAS - GasMischanteil));
 
if(GasMischanteil < 20) GierMischanteil = 0;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Nick-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffNick = MesswertNick - (StickNick - GPS_Nick); // Differenz bestimmen
if(IntegralFaktor) SummeNick += IntegralNick * IntegralFaktor - (StickNick - GPS_Nick); // I-Anteil bei Winkelregelung
else SummeNick += DiffNick; // I-Anteil bei HH
if(SummeNick > 0) SummeNick-= 2 ; else SummeNick += 2 ;
if(SummeNick > 16000) SummeNick = 16000;
if(SummeNick < -16000) SummeNick = -16000;
pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick
// Motor Vorn
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64;
if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int;
if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int;
 
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 = MesswertRoll - (StickRoll - GPS_Roll); // Differenz bestimmen
if(IntegralFaktor) SummeRoll += IntegralRoll * IntegralFaktor - (StickRoll - GPS_Roll);// I-Anteil bei Winkelregelung
else SummeRoll += DiffRoll; // I-Anteil bei HH
if(SummeRoll > 0) SummeRoll-= 2 ; else SummeRoll += 2 ;
if(SummeRoll > 16000) SummeRoll = 16000;
if(SummeRoll < -16000) SummeRoll = -16000;
pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64;
if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int;
if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int;
// Motor Links
motorwert = GasMischanteil + pd_ergebnis - GierMischanteil;
if ((motorwert < 0)) motorwert = 0;
else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
if (motorwert < MIN_GAS) motorwert = MIN_GAS;
Motor_Links = motorwert;
// Motor Rechts
motorwert = GasMischanteil - pd_ergebnis - GierMischanteil;
if ((motorwert < 0)) motorwert = 0;
else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
if (motorwert < MIN_GAS) motorwert = MIN_GAS;
Motor_Rechts = motorwert;
// +++++++++++++++++++++++++++++++++++++++++++++++
}
 
/branches/v0.60_MicroMag3_Nick666/V0.67g/fc.h
0,0 → 1,153
/*#######################################################################################
Flight Control
#######################################################################################*/
 
#ifndef _FC_H
#define _FC_H
 
extern volatile unsigned int I2CTimeout;
extern unsigned char Sekunde,Minute;
 
extern long Mess_IntegralNick,Mess_IntegralNick2;
extern long Mess_IntegralRoll,Mess_IntegralRoll2;
extern long Mess_Integral_Hoch;
extern long Mess_Integral_Gier,Mess_Integral_Gier2;
 
extern int KompassValue;
extern int KompassStartwert;
extern int KompassRichtung;
 
extern long IntegralNick,IntegralNick2;
extern long IntegralRoll,IntegralRoll2;
extern long IntegralAccNick,IntegralAccRoll,IntegralAccZ;
extern long Integral_Gier;
 
extern int HoehenWert;
extern int SollHoehe;
extern int MesswertNick,MesswertRoll,MesswertGier;
extern int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch;
extern volatile int NeutralAccX, NeutralAccY;
extern volatile float NeutralAccZ;
extern long Umschlag180Nick, Umschlag180Roll;
extern signed int ExternStickNick,ExternStickRoll,ExternStickGier;
extern unsigned char Parameter_UserParam1,Parameter_UserParam2,Parameter_UserParam3,Parameter_UserParam4,Parameter_UserParam5,Parameter_UserParam6,Parameter_UserParam7,Parameter_UserParam8;
 
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 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);
 
 
struct acc_neutral_struct
{
volatile int X;
volatile int Y;
volatile float Z;
};
 
extern struct acc_neutral_struct acc_neutral;
extern void calib_acc(void);
 
 
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 DynamicStability;
unsigned char UserParam5; // Wert : 0-250
unsigned char UserParam6; // Wert : 0-250
unsigned char UserParam7; // Wert : 0-250
unsigned char UserParam8; // Wert : 0-250
 
//------------------------------------------------
unsigned char LoopConfig; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
unsigned char ServoNickCompInvert; // Wert : 0-250 0 oder 1 // WICHTIG!!! am Ende lassen
unsigned char Reserved[4];
char Name[12];
};
 
 
/*
unsigned char ServoNickMax; // Wert : 0-250
unsigned char ServoNickRefresh; //
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
//------------------------------------------------
unsigned char LoopConfig; // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
unsigned char ServoNickCompInvert; // Wert : 0-250 0 oder 1 // WICHTIG!!! am Ende lassen
unsigned char Reserved[4];
char Name[12];
*/
extern struct mk_param_struct EE_Parameter;
 
extern unsigned char Parameter_Luftdruck_D;
extern unsigned char Parameter_MaxHoehe;
extern unsigned char Parameter_Hoehe_P;
extern unsigned char Parameter_Hoehe_ACC_Wirkung;
extern unsigned char Parameter_KompassWirkung;
extern unsigned char Parameter_Gyro_P;
extern unsigned char Parameter_Gyro_I;
extern unsigned char Parameter_Gier_P;
extern unsigned char Parameter_ServoNickControl;
extern unsigned char Parameter_AchsKopplung1;
extern unsigned char Parameter_AchsGegenKopplung1;
 
 
#endif //_FC_H
 
/branches/v0.60_MicroMag3_Nick666/V0.67g/flight.pnproj
0,0 → 1,0
<Project name="Flight-Ctrl"><File path="uart.h"></File><File path="main.c"></File><File path="main.h"></File><File path="makefile"></File><File path="uart.c"></File><File path="printf_P.h"></File><File path="printf_P.c"></File><File path="timer0.c"></File><File path="timer0.h"></File><File path="old_macros.h"></File><File path="twimaster.c"></File><File path="version.txt"></File><File path="twimaster.h"></File><File path="rc.c"></File><File path="rc.h"></File><File path="fc.h"></File><File path="fc.c"></File><File path="menu.h"></File><File path="menu.c"></File><File path="_Settings.h"></File><File path="analog.c"></File><File path="analog.h"></File><File path="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File><File path="eeprom.c"></File><File path="compass.c"></File><File path="compass.h"></File><File path="mymath.c"></File><File path="mymath.h"></File></Project>
/branches/v0.60_MicroMag3_Nick666/V0.67g/flight.pnps
0,0 → 1,0
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd>
/branches/v0.60_MicroMag3_Nick666/V0.67g/gps.h
0,0 → 1,14
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Nick;
extern signed int GPS_Roll;
 
void GPS_Neutral(void);
void GPS_BerechneZielrichtung(void);
/branches/v0.60_MicroMag3_Nick666/V0.67g/main.c
0,0 → 1,263
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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--; // Auf Index 0 bis 4 anpassen
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--; // Auf Index 0 bis 4 anpassen
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 68 // 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], sizeof(struct mk_param_struct));
}
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 3); // default-Setting
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], EE_DATENREVISION);
}
 
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4)
{
printf("\n\rACC nicht abgeglichen!");
}
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], sizeof(struct mk_param_struct));
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber());
 
//kurze Wartezeit (sonst reagiert die "Kompass kalibrieren?"-Abfrage nicht
timer = SetDelay(500);
while(!CheckDelay(timer));
//Kompass kalibrieren?
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 100 && PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 100)
{
printf("\n\rKalibriere Kompass");
calib_MM3();
}
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--;
else
{
DubWiseKeys[0] = 0;
DubWiseKeys[1] = 0;
ExternStickNick = 0;
ExternStickRoll = 0;
ExternStickGier = 0;
}
if(SenderOkay) SenderOkay--;
if(!I2CTimeout)
{
I2CTimeout = 5;
i2c_reset();
if((BeepMuster == 0xffff) && MotorenEin)
{
beeptime = 10000;
BeepMuster = 0x0080;
}
}
else
{
I2CTimeout--;
ROT_OFF;
}
}
if(SIO_DEBUG)
{
DatenUebertragung();
BearbeiteRxDaten();
}
else BearbeiteRxDaten();
if(CheckDelay(timer))
{
if(UBat < EE_Parameter.UnterspannungsWarnung)
{
if(BeepMuster == 0xffff)
{
beeptime = 6000;
BeepMuster = 0x0300;
}
}
// SPI_StartTransmitPacket();
timer = SetDelay(100);
}
}
return (1);
}
 
/branches/v0.60_MicroMag3_Nick666/V0.67g/main.h
0,0 → 1,100
#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 EEPROM_ADR_ACC_NICK 4
#define EEPROM_ADR_ACC_ROLL 6
#define EEPROM_ADR_ACC_Z 8
 
#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 unsigned char SenderOkay;
extern unsigned char PlatinenVersion;
 
void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length);
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length);
extern unsigned char GetActiveParamSetNumber(void);
extern unsigned char EEPromArray[];
 
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include <avr/wdt.h>
 
#include "old_macros.h"
 
#include "_Settings.h"
#include "printf_P.h"
#include "timer0.h"
#include "uart.h"
#include "analog.h"
#include "twimaster.h"
#include "menu.h"
#include "rc.h"
#include "fc.h"
#include "gps.h"
#include "compass.h"
#include "mymath.h"
 
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
 
#define DEBUG_DISPLAY_INTERVALL 123 // in ms
 
 
#define DELAY_US(x) ((unsigned int)( (x) * 1e-6 * F_CPU ))
#endif //_MAIN_H
 
 
 
 
 
 
/branches/v0.60_MicroMag3_Nick666/V0.67g/makefile
0,0 → 1,419
#--------------------------------------------------------------------
# MCU name
MCU = atmega644
F_CPU = 20000000
#-------------------------------------------------------------------
HAUPT_VERSION = 0
NEBEN_VERSION = 67
VERSION_INDEX = 6
 
VERSION_KOMPATIBEL = 7 # 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
ifeq ($(VERSION_INDEX), 6)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)g
endif
ifeq ($(VERSION_INDEX), 7)
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)h
endif
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c
SRC += twimaster.c rc.c fc.c GPS.c
SRC += compass.c mymath.c
#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 \
-mtiny-stack -mcall-prologues \
-Wall -Wstrict-prototypes \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL) -DVERSION_INDEX=$(VERSION_INDEX)
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
 
##LDFLAGS += -T./linkerfile/avr5.x
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = dt006
#AVRDUDE_PROGRAMMER = ponyser
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden
 
 
#AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS)
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
AVRDUDE_FLAGS += -V
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Define programs and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS)
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
 
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
 
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
 
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
# $(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/branches/v0.60_MicroMag3_Nick666/V0.67g/menu.c
0,0 → 1,139
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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 = 12,MenuePunkt=0;
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); RemotePollDisplayLine = -1; }
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); RemotePollDisplayLine = -1;}
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;
case 11:
LCD_printfxy(0,0,"MM3 Off");
LCD_printfxy(0,1,"X_Offset: %3i",MM3_calib.X_off);
LCD_printfxy(0,2,"Y_Offset: %3i",MM3_calib.Y_off);
LCD_printfxy(0,3,"Z_Offset: %3i",MM3_calib.Z_off);
break;
case 12:
LCD_printfxy(0,0,"MM3 Range");
LCD_printfxy(0,1,"X_Range: %4i",MM3_calib.X_range);
LCD_printfxy(0,2,"Y_Range: %4i",MM3_calib.Y_range);
LCD_printfxy(0,3,"Z_Range: %4i",MM3_calib.Z_range);
break;
default: MaxMenue = MenuePunkt - 1;
MenuePunkt = 0;
break;
}
RemoteTasten = 0;
}
/branches/v0.60_MicroMag3_Nick666/V0.67g/menu.h
0,0 → 1,6
extern void Menu(void);
extern void LcdClear(void);
extern char DisplayBuff[80];
extern unsigned char DispPtr;
extern unsigned char RemoteTasten;
 
/branches/v0.60_MicroMag3_Nick666/V0.67g/mymath.c
0,0 → 1,126
/*
 
Copyright 2007, Niklas Nold
 
This program (files math.c and math.h) is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation;
either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
 
Please note: All the other files for the project "Mikrokopter" by H. Buss are under the license (license_buss.txt) published by www.mikrokopter.de
*/
 
#include "main.h"
 
 
const uint8_t pgm_atan[270] PROGMEM = {0,1,2,3,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,27,28,29,30,31,32,33,33,34,35,36,37,37,38,39,39,40,41,41,42,43,43,44,44,45,46,46,47,47,48,48,49,49,50,50,51,51,52,52,52,53,53,54,54,54,55,55,56,56,56,57,57,57,58,58,58,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,64,65,65,65,65,65,66,66,66,66,66,67,67,67,67,67,67,68,68,68,68,68,68,69,69,69,69,69,69,69,70,70,70,70,70,70,70,70,71,71,71,71,71,71,71,71,72,72,72,72,72,72,72,72,72,73,73,73,73,73,73,73,73,73,73,74,74,74,74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,75,75,75,75,75,75,75,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79};
 
//############################################################################
// Arkustangens2 im Gradmaß
signed int atan2_i(signed int x, signed int y)
//############################################################################
{
int i,angle;
int8_t m;
if (!x && !y) return 0; //atan2 = 0 für x und y = 0
if (y < 0) m=-1;
else m=1;
if (x==0) return (90*m); // atan2 = 90° für x = 0
i = abs(((long)y*50) / x); // Berechne i für die Lookup table (Schrittweite atan(x) ist 0.02 -> *50)
 
if (i<270) angle = pgm_read_byte(&pgm_atan[i]); // Lookup für 1° bis 79°
else if (i>5750) angle = 90; // Grenzwert ist 90°
else if (i>=1910) angle = 89; // 89° bis 80° über Wertebereiche
else if (i>=1150) angle = 88;
else if (i>=820) angle = 87;
else if (i>=640) angle = 86;
else if (i>=520) angle = 85;
else if (i>=440) angle = 84;
else if (i>=380) angle = 83;
else if (i>=335) angle = 82;
else if (i>=299) angle = 81;
else angle = 80; // (i>=270)
if (x > 0) return (angle*m); // Quadrant I und IV
else if ((x < 0) && (m > 0)) return (-angle + 180); // Quadrant II
else return (angle - 180); // x < 0 && y < 0 Quadrant III
}
 
 
const float pgm_sinus_f[91] PROGMEM = {0.0,0.0174524,0.0348995,0.0523360,0.0697565,0.0871557,0.1045285,0.1218693,0.1391731,0.1564345,0.1736482,0.1908090,0.2079117,0.2249510,0.2419219,0.2588190,0.2756373,0.2923717,0.3090170,0.3255681,0.3420201,0.3583679,0.3746066,0.3907311,0.4067366,0.4226182,0.4383711,0.4539905,0.4694715,0.4848096,0.5000000,0.5150381,0.5299193,0.5446390,0.5591929,0.5735764,0.5877852,0.6018150,0.6156615,0.6293204,0.6427876,0.6560590,0.6691306,0.6819983,0.6946584,0.7071068,0.7193398,0.7313537,0.7431448,0.7547096,0.7660444,0.7771459,0.7880107,0.7986355,0.8090170,0.8191520,0.8290376,0.8386706,0.8480481,0.8571673,0.8660254,0.8746197,0.8829476,0.8910065,0.8987940,0.9063078,0.9135454,0.9205048,0.9271838,0.9335804,0.9396926,0.9455186,0.9510565,0.9563047,0.9612617,0.9659258,0.9702957,0.9743701,0.9781476,0.9816272,0.9848077,0.9876883,0.9902681,0.9925461,0.9945219,0.9961947,0.9975640,0.9986295,0.9993908,0.9998477,1.0};
 
inline float pgm_read_float(const float *addr)
{
union
{
uint16_t i[2]; // 2 16-bit-Worte
float f;
} u;
u.i[0]=pgm_read_word((PGM_P)addr);
u.i[1]=pgm_read_word((PGM_P)addr+2);
return u.f;
}
 
//############################################################################
// Kosinusfunktion im Gradmaß
float cos_f(signed int winkel)
//############################################################################
{
return (sin_f(90-winkel));
}
 
//############################################################################
// Sinusfunktion im Gradmaß
float sin_f(signed int winkel)
//############################################################################
{
short int m,n;
float sinus;
//winkel = winkel % 360;
if (winkel < 0)
{
m = -1;
winkel = abs(winkel);
}
else m = +1;
// Quadranten auswerten
if (winkel <= 90) n=1;
else if ((winkel > 90 ) && (winkel <= 180)) {winkel = 180 - winkel; n = 1;}
else if ((winkel > 180 ) && (winkel <= 270)) {winkel = winkel - 180; n = -1;}
else {winkel = 360 - winkel; n = -1;} //if ((winkel > 270) && (winkel <= 360))
 
sinus = pgm_read_float(&pgm_sinus_f[winkel]);
 
return (sinus*m*n);
}
 
/*
const uint8_t pgm_asin[201] PROGMEM = {0,0,1,1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9,10,10,10,11,11,11,12,12,12,12,13,13,13,14,14,14,14,15,15,15,16,16,16,17,17,17,17,18,18,18,19,19,19,20,20,20,20,21,21,21,22,22,22,23,23,23,24,24,24,25,25,25,25,26,26,26,27,27,27,28,28,28,29,29,29,30,30,30,31,31,31,32,32,32,33,33,33,34,34,34,35,35,35,36,36,37,37,37,38,38,38,39,39,39,40,40,41,41,41,42,42,42,43,43,44,44,44,45,45,46,46,46,47,47,48,48,49,49,49,50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57,58,58,59,59,60,60,61,62,62,63,64,64,65,66,66,67,68,68,69,70,71,72,73,74,75,76,77,79,80,82,84,90};
 
//############################################################################
// Akurssinusfunktion im Gradmaß
int8_t asin_i(signed int i)
//############################################################################
{
signed char m;
if (i < 0) {m=-1;i=abs(i);}
else m=1;
i = i % 200;
return (pgm_read_byte(&pgm_asin[i]) * m);
}
*/
/branches/v0.60_MicroMag3_Nick666/V0.67g/mymath.h
0,0 → 1,11
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Peter Muehlenbrock
// Definitionen fuer Modul math
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
extern signed int atan2_i(signed int x, signed int y);
extern float cos_f(signed int winkel);
extern float sin_f(signed int winkel);
//extern int8_t asin_i(signed int i);
/branches/v0.60_MicroMag3_Nick666/V0.67g/old_macros.h
0,0 → 1,47
/*
For backwards compatibility only.
Ingo Busker ingo@mikrocontroller.com
*/
 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
 
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
#ifndef inb
#define inb(sfr) _SFR_BYTE(sfr)
#endif
 
#ifndef outb
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val))
#endif
 
#ifndef inw
#define inw(sfr) _SFR_WORD(sfr)
#endif
 
#ifndef outw
#define outw(sfr, val) (_SFR_WORD(sfr) = (val))
#endif
 
#ifndef outp
#define outp(val, sfr) outb(sfr, val)
#endif
 
#ifndef inp
#define inp(sfr) inb(sfr)
#endif
 
#ifndef BV
#define BV(bit) _BV(bit)
#endif
 
 
#ifndef PRG_RDB
#define PRG_RDB pgm_read_byte
#endif
 
/branches/v0.60_MicroMag3_Nick666/V0.67g/printf_P.c
0,0 → 1,480
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt
 
/*
Copyright (C) 1993 Free Software Foundation
 
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version.
 
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this library; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
As a special exception, if you link this library with files
compiled with a GNU compiler to produce an executable, this does not cause
the resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */
 
/*
* Copyright (c) 1990 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
/******************************************************************************
This file is a patched version of printf called _printf_P
It is made to work with avr-gcc for Atmel AVR MCUs.
There are some differences from standard printf:
1. There is no floating point support (with fp the code is about 8K!)
2. Return type is void
3. Format string must be in program memory (by using macro printf this is
done automaticaly)
4. %n is not implemented (just remove the comment around it if you need it)
5. If LIGHTPRINTF is defined, the code is about 550 bytes smaller and the
folowing specifiers are disabled :
space # * . - + p s o O
6. A function void uart_sendchar(char c) is used for output. The UART must
be initialized before using printf.
 
Alexander Popov
sasho@vip.orbitel.bg
******************************************************************************/
 
/*
* Actual printf innards.
*
* This code is large and complicated...
*/
 
#include <string.h>
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
 
#include "main.h"
 
 
//#define LIGHTPRINTF
char PrintZiel;
 
 
char Putchar(char zeichen)
{
if(PrintZiel == OUT_LCD) { DisplayBuff[DispPtr++] = zeichen; return(1);}
else return(uart_putchar(zeichen));
}
 
 
void PRINT(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(*ptr++);
}
void PRINTP(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(pgm_read_byte(ptr++));
}
 
void PAD_SP(signed char howmany)
{
for(;howmany>0;howmany--) Putchar(' ');
}
 
void PAD_0(signed char howmany)
{
for(;howmany>0;howmany--) Putchar('0');
}
 
#define BUF 40
 
/*
* Macros for converting digits to letters and vice versa
*/
#define to_digit(c) ((c) - '0')
#define is_digit(c) ((c)<='9' && (c)>='0')
#define to_char(n) ((n) + '0')
 
/*
* Flags used during conversion.
*/
#define LONGINT 0x01 /* long integer */
#define LONGDBL 0x02 /* long double; unimplemented */
#define SHORTINT 0x04 /* short integer */
#define ALT 0x08 /* alternate form */
#define LADJUST 0x10 /* left adjustment */
#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */
#define HEXPREFIX 0x40 /* add 0x or 0X prefix */
 
void _printf_P (char ziel,char const *fmt0, ...) /* Works with string from FLASH */
{
va_list ap;
register const char *fmt; /* format string */
register char ch; /* character from fmt */
register int n; /* handy integer (short term usage) */
register char *cp; /* handy char pointer (short term usage) */
const char *fmark; /* for remembering a place in fmt */
register unsigned char flags; /* flags as above */
signed char width; /* width from format (%8d), or 0 */
signed char prec; /* precision from format (%.3d), or -1 */
char sign; /* sign prefix (' ', '+', '-', or \0) */
unsigned long _ulong=0; /* integer arguments %[diouxX] */
#define OCT 8
#define DEC 10
#define HEX 16
unsigned char base; /* base for [diouxX] conversion */
signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */
signed char dpad; /* extra 0 padding needed for integers */
signed char fieldsz; /* field size expanded by sign, dpad etc */
/* The initialization of 'size' is to suppress a warning that
'size' might be used unitialized. It seems gcc can't
quite grok this spaghetti code ... */
signed char size = 0; /* size of converted field or string */
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
char ox[2]; /* space for 0x hex-prefix */
 
PrintZiel = ziel; // bestimmt, LCD oder UART
va_start(ap, fmt0);
fmt = fmt0;
 
/*
* Scan the format for conversions (`%' character).
*/
for (;;) {
for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++)
/* void */;
if ((n = fmt - fmark) != 0) {
PRINTP(fmark, n);
}
if (ch == '\0')
goto done;
fmt++; /* skip over '%' */
 
flags = 0;
dprec = 0;
width = 0;
prec = -1;
sign = '\0';
 
rflag: ch = PRG_RDB(fmt++);
reswitch:
#ifdef LIGHTPRINTF
if (ch=='o' || ch=='u' || (ch|0x20)=='x') {
#else
if (ch=='u' || (ch|0x20)=='x') {
#endif
if (flags&LONGINT) {
_ulong=va_arg(ap, unsigned long);
} else {
register unsigned int _d;
_d=va_arg(ap, unsigned int);
_ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d;
}
}
#ifndef LIGHTPRINTF
if(ch==' ') {
/*
* ``If the space and + flags both appear, the space
* flag will be ignored.''
* -- ANSI X3J11
*/
if (!sign)
sign = ' ';
goto rflag;
} else if (ch=='#') {
flags |= ALT;
goto rflag;
} else if (ch=='*'||ch=='-') {
if (ch=='*') {
/*
* ``A negative field width argument is taken as a
* - flag followed by a positive field width.''
* -- ANSI X3J11
* They don't exclude field widths read from args.
*/
if ((width = va_arg(ap, int)) >= 0)
goto rflag;
width = -width;
}
flags |= LADJUST;
flags &= ~ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch=='+') {
sign = '+';
goto rflag;
} else if (ch=='.') {
if ((ch = PRG_RDB(fmt++)) == '*') {
n = va_arg(ap, int);
prec = n < 0 ? -1 : n;
goto rflag;
}
n = 0;
while (is_digit(ch)) {
n = n*10 + to_digit(ch);
ch = PRG_RDB(fmt++);
}
prec = n < 0 ? -1 : n;
goto reswitch;
} else
#endif /* LIGHTPRINTF */
if (ch=='0') {
/*
* ``Note that 0 is taken as a flag, not as the
* beginning of a field width.''
* -- ANSI X3J11
*/
if (!(flags & LADJUST))
flags |= ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch>='1' && ch<='9') {
n = 0;
do {
n = 10 * n + to_digit(ch);
ch = PRG_RDB(fmt++);
} while (is_digit(ch));
width = n;
goto reswitch;
} else if (ch=='h') {
flags |= SHORTINT;
goto rflag;
} else if (ch=='l') {
flags |= LONGINT;
goto rflag;
} else if (ch=='c') {
*(cp = buf) = va_arg(ap, int);
size = 1;
sign = '\0';
} else if (ch=='D'||ch=='d'||ch=='i') {
if(ch=='D')
flags |= LONGINT;
if (flags&LONGINT) {
_ulong=va_arg(ap, long);
} else {
register int _d;
_d=va_arg(ap, int);
_ulong = flags&SHORTINT ? (long)(short)_d : (long)_d;
}
if ((long)_ulong < 0) {
_ulong = -_ulong;
sign = '-';
}
base = DEC;
goto number;
} else
/*
if (ch=='n') {
if (flags & LONGINT)
*va_arg(ap, long *) = ret;
else if (flags & SHORTINT)
*va_arg(ap, short *) = ret;
else
*va_arg(ap, int *) = ret;
continue; // no output
} else
*/
#ifndef LIGHTPRINTF
if (ch=='O'||ch=='o') {
if (ch=='O')
flags |= LONGINT;
base = OCT;
goto nosign;
} else if (ch=='p') {
/*
* ``The argument shall be a pointer to void. The
* value of the pointer is converted to a sequence
* of printable characters, in an implementation-
* defined manner.''
* -- ANSI X3J11
*/
/* NOSTRICT */
_ulong = (unsigned int)va_arg(ap, void *);
base = HEX;
flags |= HEXPREFIX;
ch = 'x';
goto nosign;
} else if (ch=='s') { // print a string from RAM
if ((cp = va_arg(ap, char *)) == NULL) {
cp=buf;
cp[0] = '(';
cp[1] = 'n';
cp[2] = 'u';
cp[4] = cp[3] = 'l';
cp[5] = ')';
cp[6] = '\0';
}
if (prec >= 0) {
/*
* can't use strlen; can only look for the
* NUL in the first `prec' characters, and
* strlen() will go further.
*/
char *p = (char*)memchr(cp, 0, prec);
 
if (p != NULL) {
size = p - cp;
if (size > prec)
size = prec;
} else
size = prec;
} else
size = strlen(cp);
sign = '\0';
} else
#endif /* LIGHTPRINTF */
if(ch=='U'||ch=='u') {
if (ch=='U')
flags |= LONGINT;
base = DEC;
goto nosign;
} else if (ch=='X'||ch=='x') {
base = HEX;
/* leading 0x/X only if non-zero */
if (flags & ALT && _ulong != 0)
flags |= HEXPREFIX;
 
/* unsigned conversions */
nosign: sign = '\0';
/*
* ``... diouXx conversions ... if a precision is
* specified, the 0 flag will be ignored.''
* -- ANSI X3J11
*/
number: if ((dprec = prec) >= 0)
flags &= ~ZEROPAD;
 
/*
* ``The result of converting a zero value with an
* explicit precision of zero is no characters.''
* -- ANSI X3J11
*/
cp = buf + BUF;
if (_ulong != 0 || prec != 0) {
register unsigned char _d,notlastdigit;
do {
notlastdigit=(_ulong>=base);
_d = _ulong % base;
 
if (_d<10) {
_d+='0';
} else {
_d+='a'-10;
if (ch=='X') _d&=~0x20;
}
*--cp=_d;
_ulong /= base;
} while (notlastdigit);
#ifndef LIGHTPRINTF
// handle octal leading 0
if (base==OCT && flags & ALT && *cp != '0')
*--cp = '0';
#endif
}
 
size = buf + BUF - cp;
} else { //default
/* "%?" prints ?, unless ? is NUL */
if (ch == '\0')
goto done;
/* pretend it was %c with argument ch */
cp = buf;
*cp = ch;
size = 1;
sign = '\0';
}
 
/*
* All reasonable formats wind up here. At this point,
* `cp' points to a string which (if not flags&LADJUST)
* should be padded out to `width' places. If
* flags&ZEROPAD, it should first be prefixed by any
* sign or other prefix; otherwise, it should be blank
* padded before the prefix is emitted. After any
* left-hand padding and prefixing, emit zeroes
* required by a decimal [diouxX] precision, then print
* the string proper, then emit zeroes required by any
* leftover floating precision; finally, if LADJUST,
* pad with blanks.
*/
 
/*
* compute actual size, so we know how much to pad.
*/
fieldsz = size;
 
dpad = dprec - size;
if (dpad < 0)
dpad = 0;
 
if (sign)
fieldsz++;
else if (flags & HEXPREFIX)
fieldsz += 2;
fieldsz += dpad;
 
/* right-adjusting blank padding */
if ((flags & (LADJUST|ZEROPAD)) == 0)
PAD_SP(width - fieldsz);
 
/* prefix */
if (sign) {
PRINT(&sign, 1);
} else if (flags & HEXPREFIX) {
ox[0] = '0';
ox[1] = ch;
PRINT(ox, 2);
}
 
/* right-adjusting zero padding */
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
PAD_0(width - fieldsz);
 
/* leading zeroes from decimal precision */
PAD_0(dpad);
 
/* the string or number proper */
PRINT(cp, size);
 
/* left-adjusting padding (always blank) */
if (flags & LADJUST)
PAD_SP(width - fieldsz);
}
done:
va_end(ap);
}
/branches/v0.60_MicroMag3_Nick666/V0.67g/printf_P.h
0,0 → 1,19
#ifndef _PRINTF_P_H_
#define _PRINTF_P_H_
 
#include <avr/pgmspace.h>
 
#define OUT_V24 0
#define OUT_LCD 1
 
 
void _printf_P (char, char const *fmt0, ...);
extern char PrintZiel;
 
 
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args)
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args)
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);}
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);}
 
#endif
/branches/v0.60_MicroMag3_Nick666/V0.67g/rc.c
0,0 → 1,84
/*#######################################################################################
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 > (int) Parameter_UserParam2 * 10) && (signal < 8000))
if((signal > 1100) && (signal < 8000))
{
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten
index = 1;
}
else
{
if(index < 10)
{
if((signal > 250) && (signal < 687))
{
signal -= 466;
// Stabiles Signal
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;}
tmp = (3 * (PPM_in[index]) + signal) / 4;
// if(tmp > signal+1) tmp--; else
// if(tmp < signal-1) tmp++;
PPM_diff[index] = tmp - PPM_in[index];
PPM_in[index] = tmp;
}
index++;
if(index == 5) PORTD |= 0x20; else PORTD &= ~0x20; // Servosignal an J3 anlegen
if(index == 6) PORTD |= 0x10; else PORTD &= ~0x10; // Servosignal an J4 anlegen
//if(index == 7) PORTD |= 0x08; else PORTD &= ~0x08; // Servosignal an J5 anlegen
}
}
}
 
 
 
 
 
/branches/v0.60_MicroMag3_Nick666/V0.67g/rc.h
0,0 → 1,29
/*#######################################################################################
Derkodieren eines RC Summen Signals
#######################################################################################*/
 
#ifndef _RC_H
#define _RC_H
 
#if defined (__AVR_ATmega32__)
#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
#endif
 
#if defined (__AVR_ATmega644__)
//#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
//#define TIMER_TEILER CK256 // bei 20MHz
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz
#endif
 
#define GAS PPM_in[2]
 
 
extern void rc_sum_init (void);
 
extern volatile int PPM_in[11];
extern volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
extern volatile unsigned char NewPpmData;
 
#endif //_RC_H
/branches/v0.60_MicroMag3_Nick666/V0.67g/timer0.c
0,0 → 1,145
#include "main.h"
 
volatile unsigned int CountMilliseconds = 0;
volatile unsigned char UpdateMotor = 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) // 9,8kHz
{
static unsigned char cnt_1ms = 1,cnt = 0;
unsigned char pieper_ein = 0;
// TCNT0 -= 250;//TIMER_RELOAD_VALUE;
 
if(!cnt--)
{
cnt = 10;
cnt_1ms++;
cnt_1ms %= 2;
if(!cnt_1ms) UpdateMotor = 1;
CountMilliseconds++;
}
 
if(beeptime > 1)
{
beeptime--;
if(beeptime & BeepMuster)
{
pieper_ein = 1;
}
else pieper_ein = 0;
}
else
{
pieper_ein = 0;
BeepMuster = 0xffff;
}
 
 
if(pieper_ein)
{
if(PlatinenVersion == 10) PORTD |= (1<<2); // Speaker an PORTD.2
else PORTC |= (1<<7); // Speaker an PORTC.7
}
else
{
if(PlatinenVersion == 10) PORTD &= ~(1<<2);
else PORTC &= ~(1<<7);
}
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) timer0_MM3(); // Kompass auslesen
}
 
 
void Timer_Init(void)
{
TCCR0B = CK8;
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM
OCR0A = 0;
OCR0B = 120;
TCNT0 = (unsigned char)-TIMER_RELOAD_VALUE; // reload
//OCR1 = 0x00;
 
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3;
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22);
// TIMSK2 |= _BV(TOIE2);
TIMSK2 |= _BV(OCIE2A);
 
TIMSK0 |= _BV(TOIE0);
OCR2A = 10;
TCNT2 = 0;
}
 
// -----------------------------------------------------------------------
 
unsigned int SetDelay (unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(CountMilliseconds + t + 1);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
char CheckDelay(unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(((t - CountMilliseconds) & 0x8000) >> 9);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
void Delay_ms(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt));
}
 
void Delay_ms_Mess(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt)) ANALOG_ON;
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Servo ansteuern
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(SIG_OUTPUT_COMPARE2A)
{
static unsigned char timer = 10;
if(!timer--)
{
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3;
ServoValue = Parameter_ServoNickControl;
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin;
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax;
 
OCR2A = ServoValue;// + 75;
timer = EE_Parameter.ServoNickRefresh;
}
else
{
TCCR2A =3;
PORTD&=~0x80;
}
}
/branches/v0.60_MicroMag3_Nick666/V0.67g/timer0.h
0,0 → 1,15
 
#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 int ServoValue;
extern unsigned int BeepMuster;
/branches/v0.60_MicroMag3_Nick666/V0.67g/twimaster.c
0,0 → 1,152
/*############################################################################
############################################################################*/
 
#include "main.h"
 
unsigned char twi_state = 0;
unsigned char motor = 0;
unsigned char motorread = 0;
unsigned char motor_rx[8];
 
//############################################################################
//Initzialisieren der I2C (TWI) Schnittstelle
void i2c_init(void)
//############################################################################
{
TWSR = 0;
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2;
}
 
//############################################################################
//Start I2C
char i2c_start(void)
//############################################################################
{
TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
void i2c_stop(void)
//############################################################################
{
TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);
}
 
void i2c_reset(void)
//############################################################################
{
i2c_stop();
twi_state = 0;
motor = TWDR;
motor = 0;
TWCR = 0x80;
TWAMR = 0;
TWAR = 0;
TWDR = 0;
TWSR = 0;
TWBR = 0;
i2c_init();
i2c_start();
i2c_write_byte(0);
}
 
//############################################################################
//Start I2C
char i2c_write_byte(char byte)
//############################################################################
{
TWSR = 0x00;
TWDR = byte;
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
SIGNAL (TWI_vect)
//############################################################################
{
switch (twi_state++)
{
case 0:
i2c_write_byte(0x52+(motor*2));
break;
case 1:
switch(motor++)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 2:
i2c_stop();
if (motor<4) twi_state = 0;
else motor = 0;
i2c_start();
break;
//Liest Daten von Motor
case 3:
i2c_write_byte(0x53+(motorread*2));
break;
case 4:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 5: //1 Byte vom Motor lesen
motor_rx[motorread] = TWDR;
 
case 6:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 7: //2 Byte vom Motor lesen
motor_rx[motorread+4] = TWDR;
motorread++;
if (motorread>3) motorread=0;
i2c_stop();
I2CTimeout = 10;
twi_state = 0;
}
TWCR |= 0x80;
}
/branches/v0.60_MicroMag3_Nick666/V0.67g/twimaster.h
0,0 → 1,33
/*############################################################################
############################################################################*/
 
#ifndef _I2C_MASTER_H
#define _I2C_MASTER_H
 
//############################################################################
 
// I2C Konstanten
#define SCL_CLOCK 200000L
#define I2C_TIMEOUT 30000
#define I2C_START 0x08
#define I2C_REPEATED_START 0x10
#define I2C_TX_SLA_ACK 0x18
#define I2C_TX_DATA_ACK 0x28
#define I2C_RX_SLA_ACK 0x40
#define I2C_RX_DATA_ACK 0x50
 
//############################################################################
 
extern unsigned char twi_state;
extern unsigned char motor;
extern unsigned char motorread;
extern unsigned char motor_rx[8];
 
void i2c_reset(void);
extern void i2c_init (void); // I2C initialisieren
extern char i2c_start (void); // Start I2C
extern void i2c_stop (void); // Stop I2C
extern char i2c_write_byte (char byte); // 1 Byte schreiben
extern void i2c_reset(void);
 
#endif
/branches/v0.60_MicroMag3_Nick666/V0.67g/uart.c
0,0 → 1,388
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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 RemotePollDisplayLine = 0;
unsigned char NurKanalAnforderung = 0;
unsigned char DebugTextAnforderung = 255;
unsigned char PcZugriff = 100;
unsigned char MotorTest[4] = {0,0,0,0};
unsigned char DubWiseKeys[3] = {0,0,0};
unsigned char MeineSlaveAdresse;
struct str_DebugOut DebugOut;
struct str_Debug DebugIn;
struct str_VersionInfo VersionInfo;
int Debug_Timer;
 
const unsigned char ANALOG_TEXT[32][16] =
{
//1234567890123456
"IntegralNick ", //0
"IntegralRoll ",
"AccNick ",
"AccRoll ",
"GyroGier ",
"HoehenWert ", //5
"AccZ ",
"Gas ",
"KompassValue ",
"Spannung ",
"Empfang ", //10
"Analog11 ",
"Motor_Vorne ",
"Motor_Hinten ",
"Motor_Links ",
"Motor_Rechts ", //15
"Acc_Z ",
"MittelAccNick ",
"MittelAccRoll ",
"IntegralErrNick ",
"IntegralErrRoll ", //20
"MittelIntNick ",
"MittelIntRoll ",
"NeutralNick ",
"RollOffset ",
"IntRoll*Faktor ", //25
"Analog26 ",
"DirektAusglRoll ",
"MesswertRoll ",
"AusgleichRoll ",
"I-LageRoll ", //30
"StickRoll "
};
 
 
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ 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 'a':// Texte der Analogwerte
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
DebugTextAnforderung = tmp_char_arr2[0];
break;
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 'k':// Keys von DubWise
Decode64((unsigned char *) &DubWiseKeys[0],sizeof(DubWiseKeys),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], sizeof(struct mk_param_struct));
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],sizeof(struct mk_param_struct));
}
else
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],sizeof(struct mk_param_struct));
break;
case 'l':
case 'm':
case 'n':
case 'o':
case 'p': // Parametersatz speichern
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],sizeof(struct mk_param_struct),3,AnzahlEmpfangsBytes);
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], sizeof(struct mk_param_struct));
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)
{
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(DebugTextAnforderung != 255) // Texte für die Analogdaten
{
SendOutData('A',DebugTextAnforderung + '0',(unsigned char *) ANALOG_TEXT[DebugTextAnforderung],16);
DebugTextAnforderung = 255;
}
 
if(DebugDisplayAnforderung && UebertragungAbgeschlossen)
{
Menu();
DebugDisplayAnforderung = 0;
if(++RemotePollDisplayLine == 4 || NurKanalAnforderung)
{
SendOutData('4',0,(unsigned char *)&PPM_in,sizeof(PPM_in)); // DisplayZeile übertragen
RemotePollDisplayLine = -1;
}
else SendOutData('0' + RemotePollDisplayLine,0,(unsigned char *)&DisplayBuff[20 * RemotePollDisplayLine],20); // DisplayZeile übertragen
}
if(GetVersionAnforderung && UebertragungAbgeschlossen)
{
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo));
GetVersionAnforderung = 0;
}
 
}
 
/branches/v0.60_MicroMag3_Nick666/V0.67g/uart.h
0,0 → 1,100
#ifndef _UART_H
#define _UART_H
 
#define MAX_SENDE_BUFF 150
#define MAX_EMPFANGS_BUFF 150
#define DUB_KEY_UP 4
#define DUB_KEY_DOWN 8
#define DUB_KEY_RIGHT 32
#define DUB_KEY_LEFT 16
#define DUB_KEY_FIRE 64
 
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 unsigned char RemotePollDisplayLine;
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];
extern unsigned char DubWiseKeys[3];
struct str_DebugOut
{
unsigned char Digital[2];
unsigned int Analog[32]; // Debugwerte
};
 
extern struct str_DebugOut DebugOut;
 
struct str_Debug
{
unsigned char Digital[2];
unsigned char RemoteTasten;
unsigned int Analog[4];
};
extern struct str_Debug DebugIn;
 
struct str_VersionInfo
{
unsigned char Hauptversion;
unsigned char Nebenversion;
unsigned char PCKompatibel;
unsigned char Rserved[7];
};
extern struct str_VersionInfo VersionInfo;
 
//Die Baud_Rate der Seriellen Schnittstelle ist 9600 Baud
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICRB
#endif
 
#if defined (__AVR_ATmega32__)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
# define INT_VEC_RX SIG_UART_RECV
# define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICR0B
# define TXEN TXEN0
# define RXEN RXEN0
# define RXCIE RXCIE0
# define TXCIE TXCIE0
# define U2X U2X0
# define UCSRB UCSR0B
# define UDRE UDRE0
# define INT_VEC_RX SIG_USART_RECV
# define INT_VEC_TX SIG_USART_TRANS
#endif
 
 
#endif //_UART_H
/branches/v0.60_MicroMag3_Nick666/V0.67g/version.txt
0,0 → 1,107
 
-------
V0.53 27.04.2007 H.Buss
- erste öffentliche Version
 
V0.53b 29.04.2007 H.Buss
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft
 
V0.53c 29.04.2007 H.Buss
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind.
Die angezeigten Werte waren nicht die Werte der Funke
 
V0.54 01.05.2007 H.Buss
- die Paramtersätze können jetzt vor dem Start ausgewählt werden
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt:
2 3 4
1 x 5
- - -
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw.
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt
 
V0.55 14.05.2007 H.Buss
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden
 
V0.56 14.05.2007 H.Buss
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen
V0.57 24.05.2007 H.Buss
- Der Höhenregler kann nun auch mittels Schalter bedient werden
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat
- Kompass-Einfluss dämpfen bei Neigung
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen
- Der Motortest vom Kopter-Tool geht jetzt
- Man kann den Parametersätzen einen Namen geben
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert
V0.58 30.05.2007 H.Buss
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist
 
V0.60 17.08.2007 H.Buss
- "Schwindel-Bug" behoben
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft
- Poti4 zugefügt
- Es werden jetzt 8 Kanäle ausgewertet
- Kamera-Servo (an J7)
- Die Settings müssen überschrieben werden
V0.61 - V0.63 H.Buss 27.09.2007
- Poti 4 und Kanal 8 werden im Menü angezeigt
- ein paar Kleinigkeiten bei den DefaultKonstanten2 bereinigt
- Analog.c: Aktuell_ax korrigiert
- auf 32 Debug-Kanäle erweitert
- Loopings sind jetzt möglich und einzeln im KopterTool freischaltbar
- leichte Anpassungen im Gier - Geschwindigkeit und Drift
- die Hardwareversion V1.1 wird erkannt und das Programm stellt sich auf die geänderte Gyroverstärkung und die geänderten Portpins ein
- die Software startet nach dem Einschalten schneller, weil der Luftdruckoffset schneller gefunden wird
- die PPM-Ausgänge liegen wieder an den Pins an
- Details an der Sensordatenverarbeitung -> es fliegt sich geringfügig anders
- der MK ist bei wenig Gas nicht mehr so giftig -> soll das Landen vereinfachen
- I2C-Bus läuft jetzt sicher nach einer Störung wieder an
- Sticksignale werden präziser ausgewertet
- Stick-Kanäle werden ans Kopter-Tool übertragen
- Es muss die Version V1.47 des Kopter-Tool verwendet werden
- Die Settings werden auf Default zurückgesetzt
- am Piepen kann man die Fehlerart unterscheiden
1. einzelnes Piepen beim Einschalten und Kalibrieren
2. langsames Intervall mindestens 1 Sek -> Empfangsausfall
3. schnelleres Intervall mindestens 1 Sek -> Akku
4. sehr schnelles Intervall mindestens 1 Sek -> Kommunikation zu den Reglern gestört
V0.64 H.Buss 30.09.2007
- beim Gieren wurden die Achsen nicht hart genug geregelt
V0.65a H.Buss 15.10.2007
- Integral im Mischer wieder integriert
- Feinabstimmung im ACC/Gyro Abgleich -> 1/32 & 100
- ACC/Gyro Abgleich auch bei HH
 
V0.66a H.Buss 3.11.2007
- Messwertverarbeitung aus dem Analog-Interrupt entfernt
- Analogmessung hängt jetzt am FC-Timing
- Looping-Stick-Hysterese eingebaut
- Looping-180°-Umschlag einstellbar
- Achsenkopplung: Gierbewegung verkoppelt Nick und Roll
- Lageregelung nach ACC-Sensor verbessert
- zusätzlicher I-Anteil in der Lageregelung verbessert die Neutrallage
- Gyrodriftkompensation überarbeitet
- Bug in der Gier-Stick-Berechnung behoben
- Gyro-Messung auf 1kHz beschleunigt
V0.67a H.Buss 16.11.2007
- der Hauptregler-I-Anteil wirkt jetzt nur noch auf den Winkel (ausser im HH-Mode)
- Gyro-Acc-Abgleich jetzt wieder in jedem Zyklus
- Feinabstimmung
- Beim HH-Modus gab es noch Bugs
 
V0.67e H.Buss 29.11.2007
- Parameter: Dynamic Stability und Driftfaktor eingeführt
- Die Namen der Analogwerte werden jetzt zum Koptertool übertragen
- Kompatibilität zum Koptertool erhöht
 
V0.67f H.Buss 04.12.2007
- Giersteuerwert im Mischer auf Gas/2 begrenzt
- Die Analogwerte des ACC-Sensors können dauerhaft im EEPROM gespeichert werden
- Das Integral des Hauptreglers wird jetzt linear entladen und nicht mehr proportional
/branches/v0.60_MicroMag3_Nick666/trunc/Flight-Ctrl_MEGA644_V0_60_MM3.eep
0,0 → 1,21
:1000000000000000000000000000000000000000F0
:1000100000000000000000000000000000000000E0
:1000200000000000000000000000000000000000D0
:1000300000000000000000000000000000000000C0
:1000400000000000000000000000000000000000B0
:1000500000000000000000000000000000000000A0
:100060000000000000000000000000000000000090
:100070000000000000000000000000000000000080
:100080000000000000000000000000000000000070
:100090000000000000000000000000000000000060
:1000A0000000000000000000000000000000000050
:1000B0000000000000000000000000000000000040
:1000C0000000000000000000000000000000000030
:1000D0000000000000000000000000000000000020
:1000E0000000000000000000000000000000000010
:1000F0000000000000000000000000000000000000
:1001000000000000000000000000000000000000EF
:1001100000000000000000000000000000000000DF
:1001200000000000000000000000000000000000CF
:0D01300000000000000000000000000000C2
:00000001FF
/branches/v0.60_MicroMag3_Nick666/trunc/Flight-Ctrl_MEGA644_V0_60_MM3.elf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v0.60_MicroMag3_Nick666/trunc/Flight-Ctrl_MEGA644_V0_60_MM3.hex
0,0 → 1,1507
:100000000C948A030C94A7030C94A7030C94A703E5
:100010000C94A7030C94A7030C94A7030C94A703B8
:100020000C94A7030C94C70B0C94A7030C94A70380
:100030000C94E0180C94A7030C94A7030C94A7034A
:100040000C94A7030C94A7030C946A0C0C946114F1
:100050000C94CC050C94A7030C9496050C94A70360
:100060000C94E30C0C94A7030C944D180C94A70368
:100070004308BD08BD08BD0875085608BD08BD0881
:10008000BD08A108A108A108A108A1087908BD0818
:10009000BD086808BD0871080C0D5E0DB70D120E85
:1000A0002F0E520E780E5F0F9E10D2103311891151
:1000B000D7115012AA120B132F136513A113DF13BC
:1000C00018140A0A0D004E65757472616C0048655B
:1000D0006164696E67486F6C64000A0D53746575DE
:1000E0006572756E673A20004F4B0A0D000A0D418C
:1000F00062676C65696368204C75667464727563C9
:100100006B73656E736F722E2E000A0D4B616C69F6
:10011000627269657265204E65757472616C6C619E
:100120006765000A0D4B616C6962726965726520D2
:100130004B6F6D70617373000A0D42656E75747A52
:100140006520506172616D657465727361747A20A7
:100150002564000A0D496E69742E20454550524FA2
:100160004D3A2047656E6572696572652044656623
:1001700061756C742D506172616D657465722E2E9F
:100180002E000A0D3D3D3D3D3D3D3D3D3D3D3D3D4E
:100190003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D8F
:1001A0003D3D000A0D466C69676874436F6E74725A
:1001B0006F6C205625642E256420002E005A5F5255
:1001C000616E67653A202025346900595F52616E7F
:1001D00067653A202025346900585F52616E676573
:1001E0003A2020253469004D4D332052616E6765F9
:1001F000005A5F4F66667365743A202025336900A4
:10020000595F4F66667365743A202025336900583C
:100210005F4F66667365743A2020253369004D4D43
:1002200033204F66660052616E67653A2533692D4B
:10023000253369005374656C6C756E673A202533FD
:100240006900536574706F696E74202025336900EE
:10025000536572766F202000506F7469343A202005
:1002600025336900506F7469333A202025336900C3
:10027000506F7469323A202025336900506F7469D9
:10028000313A20202533690053746172743A20207A
:10029000202020253569004D657373776572743AA7
:1002A0002020253569005269636874756E673A20AD
:1002B00020253569004B6F6D7061737320202020FD
:1002C00020202000456D70662E506567656C3A25CC
:1002D0003569005370616E6E756E673A2020253562
:1002E0006900486F6368202534692028253369290F
:1002F00000526F6C6C202534692028253369290051
:100300004E69636B20253469202825336929004113
:100310004343202D2053656E736F720047696572E9
:100320002025346920282533692900526F6C6C2000
:10033000253469202825336929004E69636B2025FF
:100340003469202825336929004779726F202D20D0
:1003500053656E736F720050333A25346920204B19
:10036000616EE46C65200050313A253469202050DC
:10037000323A253469200047733A253469202047F2
:10038000693A25346920004E693A253469202052A3
:100390006F3A25346920004B373A25346920204BC9
:1003A000616EE46C6520004B353A25346920204BA2
:1003B000363A25346920004B333A25346920204BE6
:1003C000343A25346920004B313A25346920204BDA
:1003D000323A25346920004B6F6D706173733A2097
:1003E000202025356900526F6C6C3A202020202097
:1003F00020253569004E69636B3A2020202020209B
:1004000025356900616B742E204C6167650048F6E4
:1004100068656E726567656C756E67004B65696EC1
:100420006520004F66662020202020203A202535B8
:1004300069004C756674647275636B3A2025356982
:1004400000536F6C6C486F6568653A20253569000C
:10045000486F6568653A20202020202535690028EE
:10046000632920486F6C676572204275737300536F
:10047000657474696E673A20256420005625642EE1
:100480002564002B2B204D696B726F4B6F70746568
:1004900072202B2B005B25695D000001020305061D
:1004A0000708090A0B0C0D0F10111213141516175B
:1004B00018191A1B1B1C1D1E1F2021212223242555
:1004C000252627272829292A2B2B2C2C2D2E2E2F89
:1004D0002F303031313232333334343435353636EF
:1004E0003637373838383939393A3A3A3B3B3B3C7A
:1004F0003C3C3C3D3D3D3D3E3E3E3E3F3F3F3F4020
:1005000040404041414141414242424242434343D3
:100510004343434444444444444545454545454597
:100520004646464646464646474747474747474763
:100530004848484848484848484949494949494934
:100540004949494A4A4A4A4A4A4A4A4A4A4A4A4B0D
:100550004B4B4B4B4B4B4B4B4B4B4B4B4C4C4C4CE7
:100560004C4C4C4C4C4C4C4C4C4C4C4D4D4D4D4DC6
:100570004D4D4D4D4D4D4D4D4D4D4D4D4E4E4E4EA7
:100580004E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E8B
:100590004F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F6B
:1005A0004F4F4F4F4F4F4F4F0000000056F88E3CBB
:1005B000C7F20E3D465E563D7FDC8E3DB07EB23DBD
:1005C0000A13D63D9D96F93D65830E3E5E30203E72
:1005D000D5D0313E6F63433ECEE6543E8E59663EE3
:1005E00060BA773EED83843E55208D3EBEB1953E88
:1005F0007A379E3EDDB0A63E421DAF3EFF7BB73E42
:1006000070CCBF3EE80DC83EC83FD03E6A61D83EC0
:100610002D72E03E7171E83E925EF03EF738F83E92
:100620000000003F89D9033FCBA8073F766D0B3F01
:1006300044270F3FE7D5123F1779163F8C101A3F1A
:10064000FE9B1D3F241B213FBA8D243F7CF3273F97
:10065000254C2B3F71972E3F22D5313FF404353F77
:10066000A726383FFF393B3FBD3E3E3FA634413FC2
:100670007C1B443F09F3463F12BB493F60734C3F2C
:10068000BD1B4F3FF2B3513FCF3B543F1EB3563FCC
:10069000AE19593F516F5B3FD7B35D3F14E75F3FE2
:1006A000DB08623F0119643F5D17663FCA03683F7C
:1006B0001DDE693F34A66B3FEB5B6D3F20FF6E3F55
:1006C000B28F703F820D723F7078733F63D0743F7A
:1006D0003F15763FEA46773F4D65783F5270793F48
:1006E000E2677A3FEC4B7B3F5C1C7C3F24D97C3F2C
:1006F00036827D3F80177E3FFD987E3F9E067F3F7E
:100700005B607F3F2FA67F3F13D87F3F05F67F3F7B
:100710000000803F11241FBECFEFD0E1DEBFCDBF70
:1007200011E0A0E0B1E0E4E8FDE502C005900D9223
:10073000AC38B107D9F715E0ACE8B1E001C01D92C3
:10074000AC32B107E1F70E94DF030C94C12E0C9488
:100750000000A2E0B0E00E94A32E802D992708950A
:10076000FB01863008F085E0282F2150842F99273F
:10077000AAE32A9FD0011124A65FBF4F019724F05E
:1007800001900E94B02EFACFA2E0B0E0022E0E94AB
:10079000B02E0895FB01282F863008F025E0842F25
:1007A00099272150AAE32A9FD0011124A65FBF4FA9
:1007B000019724F00E94A32E0192FACF08950F937F
:1007C0001F93CF93DF9381E087B98FEF88B98BE1D7
:1007D00084B9289A8EE38AB9579A87EF8BB984B780
:1007E000877F84BF80916000886180936000109251
:1007F000600088EE93E09093A7018093A601109289
:100800001E0210921D021092AD041092AC041092C0
:100810001C0210921B0210921A02109219022898C0
:100820000E94950B0E949C070E94CB180E94DD0C31
:100830000E9431180E940D1778941092A8038CE33F
:100840008093A90384E08093AA038CE390E09F93B4
:100850008F931F921F9283EA91E09F938F931F9231
:100860000E941C0982E891E09F938F931F920E943F
:100870001C09299AA1E0B0E00E94A32E802D2DB77B
:100880003EB7265F3F4F2DBF8A30B9F183E591E037
:100890009F938F931F920E941C090E9434204AE369
:1008A00064ED74E080E00E94B00301E00F900F90CF
:1008B0000F90023049F40E94C71F4AE364ED74E0D0
:1008C00082E00E94B00303E04AE364ED74E0802F0D
:1008D0000E94B0030F5F063060F381E022E030E059
:1008E000D901082E0E94B02E8AE021503040D90153
:1008F000082E0E94B02E0E94BE2102E010E0D80116
:100900000E94A32E802D4AE364ED74E00E94CA0386
:10091000D8010E94A32E802D99279F938F9388E35F
:1009200091E09F938F931F920E941C0984EF91E0A6
:100930000E94B20BEC010F900F900F900F900F9050
:10094000CE010E94BB0B8823D9F3E091D604FF2788
:10095000EE0FFF1FE855FB4F808191818536910591
:10096000C4F0E091D704FF27EE0FFF1FE855FB4FBF
:10097000808191818536910564F083E291E09F93B7
:100980008F931F920E941C090E9447160F900F9090
:100990000F90E091D604FF27EE0FFF1FE855FB4FA5
:1009A0008081918185369105C4F0E091D704FF27BD
:1009B000EE0FFF1FE855FB4F808191818C599F4FAF
:1009C00064F48AE091E09F938F931F920E941C0928
:1009D0000E94BE210F900F900F908091DC0480FF49
:1009E00020C08DEE90E09F938F931F920E941C0970
:1009F00084EC99E00E94B20BEC010E94F90F0F9079
:100A00000F900F90CE010E94BB0B8823D9F388EE84
:100A100090E09F938F931F920E941C090F900F905C
:100A20000F900E94EC20289880ED97E09093A7010A
:100A30008093A60188EE93E09093A3038093A20392
:100A400085E580939D038AED90E09F938F931F929D
:100A50000E941C098091DC040F900F900F9082FF80
:100A600003C08EEC90E002C086EC90E09F938F93E1
:100A70001F920E941C090F900F900F9082EC90E043
:100A80009F938F931F920E941C090E943D100F900C
:100A90000F900F908091A501882379F11092A50104
:100AA0000E9437220E94A520289880910101882366
:100AB00019F081508093010180911802882329F058
:100AC0008091180281508093180220910401309186
:100AD00005018091EC0499272817390734F480ED3B
:100AE00097E09093A7018093A6018091D00188237D
:100AF00019F40E94311801C028980E94B7070E947B
:100B0000250880E090E00E94BB0B882319F28091B9
:100B10001F02882329F088B190E1892788B901C094
:100B2000449884EF91E00E94B20BB4CF1F920F92D1
:100B30000FB60F9211248F939F93EF93FF938091A1
:100B400000018823E1F48091A1019091A201019616
:100B50009093A2018093A101FC01E159FD4FE08136
:100B6000ED3019F08639910539F41092A2011092F6
:100B7000A10181E080930001E093C60004C01092BF
:100B8000A2011092A101FF91EF919F918F910F907F
:100B90000FBE0F901F9018951F920F920FB60F92D5
:100BA00011242F933F934F938F939F93AF93BF93B2
:100BB000CF93DF93EF93FF938091C60080939001D2
:100BC00040919C01463910F010929B018091900158
:100BD0008D3009F05CC080919B01823009F057C0D4
:100BE00010929B01A42FBB27FD01E055FC4F3081E3
:100BF000ED01CF54DC4F288180919F019091A0019D
:100C0000831B9109821B91099F709093A00180938F
:100C10009F019C0196E0369527959A95E1F7235C14
:100C200020939E01982F9F73935C90939D018081E8
:100C3000281729F48881981711F491E006C0809153
:100C400093018F5F8093930190E0809191018823BD
:100C500009F064C0992309F461C081E08093910197
:100C600040939401AE54BC4F8DE08C938091B403BB
:100C7000823509F053C088E190E02CE00FB6F8947B
:100C8000A895809360000FBE2093600047C08091BC
:100C90009B018130D9F0813018F08230E9F530C005
:100CA00080919001833239F480919101882319F465
:100CB00081E080939B01809190018093B20381E059
:100CC00080939C0180919001992715C082E08093C8
:100CD0009B01E42FFF2780919001EE54FC4F80830D
:100CE0004F5F40939C012091900180919F019091D2
:100CF000A001820F911D9093A00180939F010EC0CF
:100D0000E42FFF2780919001EE54FC4F80834639F9
:100D100038F310929B01E7CF10929B01FF91EF9166
:100D2000DF91CF91BF91AF919F918F914F913F9163
:100D30002F910F900FBE0F901F901895DC0120E0AF
:100D400030E040E050E0EFE6F2E005C08191280F8E
:100D5000311D4F5F5F4F4A175B07C1F73F70C901F5
:100D600036E0969587953A95E1F7835CFD01E15968
:100D7000FD4F808311962F73235CFD01E159FD4FD8
:100D80002083A059BD4F8DE08C931092000180917B
:100D90006F028093C6000895EF92FF920F931F9306
:100DA000CF93DF937A01722F93E290936F02609357
:100DB00070028093710203E010E060E0A2E7B2E00D
:100DC00046C0F701E60FF11D90816F5F715019F475
:100DD000E0E040E00FC0F701E60FF11D40816F5FDA
:100DE000715011F4E0E006C0F701E60FF11DE0815B
:100DF0006F5F7150892F86958695835C8C935527FC
:100E0000892F99278370907024E0880F991F2A9565
:100E1000E1F79A0194E0369527959A95E1F7822BB0
:100E2000835CED0189834F705070440F551F440F50
:100E3000551F8E2F8295869586958370842B835CB3
:100E40008A83EF73E35CEB830C5F1F4F1496772369
:100E500009F0B7CFC8010E949E06E6E0CDB7DEB725
:100E60000C948E2E1F93CF93DF93EC0170E0A22F92
:100E7000BB27129748C0E42FFF27EE54FC4F308168
:100E80004F5FE42FFF27EE54FC4F50814F5FE42F5C
:100E9000FF27EE54FC4F10814F5FE42FFF27EE54E5
:100EA000FC4F20814F5F842F9927A817B90774F151
:100EB0005D53FE01E70FF11D3D53330F330F852FB7
:100EC00082958F70382B3083613001F1912F9D53C3
:100ED0007F5FFE01E70FF11D71505295507F892F02
:100EE00086958695582B508363506F3F79F07E5FCF
:100EF000FE01E70FF11D9295990F990F907C2D53EC
:100F0000922B90837F5F662309F0B5CFDF91CF915D
:100F10001F9108951F93182F8A3019F48DE00E94B5
:100F20008A078091C00085FFFCCF1093C60080E047
:100F300090E01F9108950895E1ECF0E088E180834E
:100F4000A0ECB0E08C9182608C938081806880837B
:100F50008081806480838AE28093C40088EC90E082
:100F60000E94B20B90939C0380939B030895809101
:100F70000001882309F468C080918C01882371F0F6
:100F800080910001882351F02BE04DE953E06091FE
:100F90006E0287E40E94CC0610928C0180919B0324
:100FA00090919C030E94BB0B882321F480918E01B9
:100FB0008823B1F080910001882391F022E348E476
:100FC00054E060916E0284E40E94CC0610928E017F
:100FD0008AEF90E00E94B20B90939C0380939B0356
:100FE00080918D018823F1F0809100018823D1F058
:100FF0000E94461010928D0180919A018F5F80931C
:101000009A01843011F410929A0180919A0144E17E
:10101000849FA00111244A5E5E4F24E160E0805D60
:101020000E94CC0680918F01882371F0809100018D
:10103000882351F02AE048EA53E060916E0286E589
:101040000E94CC0610928F010895A2E0B0E0EBE27E
:10105000F8E00C94752E80919101882309F48FC0DB
:101060008FEF809301018091B4039927AA27BB27B2
:10107000FC01E356F040E431F10508F07EC0E85C85
:10108000FF4F0C949D2E2091940143E06BE08DE97D
:1010900093E00E9432078091C60190919F03892BB3
:1010A0008093C60181E080938E0167C020919401F6
:1010B00043E062E0CE0101960E9432078091C601B2
:1010C0009981892B8093C60181E080938D0155C061
:1010D0002091940143E064E086E991E00E943207A8
:1010E0004CC081E080938F0148C081E080938C01E7
:1010F00044C02091940143E062E0CE0101960E9439
:10110000320789818F3F89F0863010F085E089832E
:101110004AE364ED74E089810E94CA0389812AE36D
:1011200044ED54E060916E0208C010916E020E947E
:10113000A9032AE344ED54E0612F855B0E94CC06AD
:101140001CC02091940143E06AE384ED94E00E9486
:1011500032078091B4034AE364ED74E08B560E9439
:10116000B0038091B4038B56A2E0B0E0082E0E9439
:10117000B02E0E94A9030E94222210929101E3E066
:10118000CE5F0C94912E982F80917A04813069F46F
:101190008091C501E82FFF27EA5EFE4F90838F5FA5
:1011A0008093C50121E030E005C0892F0E948A07A5
:1011B000282F3327C90108951F93182F04C080E3F7
:1011C0000E94C30811501116D4F31F9108951F9364
:1011D000182F04C080E20E94C30811501116D4F3E6
:1011E0001F9108950F931F93CF93DF938C01EB0111
:1011F00008C0F8010F5F1F4FE4918E2F0E94C308B3
:1012000021972097B1F7DF91CF911F910F9108950A
:101210000F931F93CF93DF938C01EB0106C0F8016E
:1012200081918F010E94C30821972097C1F7DF9118
:10123000CF911F910F910895A3E3B0E0E2E2F9E0AE
:101240000C94662E29968FAD299780937A04CE014F
:10125000855B9F4F9D838C832B968EAD9FAD2B9787
:101260009FA78EA722243324210102C01301240149
:101270000EA51FA502C00F5F1F4FF801F490FF20BD
:1012800019F0F5E2FF16B9F7B8018EA59FA5681B06
:10129000790B11F00E94F208FF2009F442C20F5F9F
:1012A0001F4F1FA70EA71982AC81BD811BAA1AAAC6
:1012B0009FEF99ABEEA5FFA5CF0101969FA78EA743
:1012C000B49095E7B91621F08B2D8062883789F4A8
:1012D000EBA9E0FF07C02D903D904D905C901397D7
:1012E000149607C08D919C9111971C01442455249C
:1012F0001296F0E2BF1621F489818823D9F685C0C1
:1013000083E2B81609F483C09AE2B91621F0EDE23F
:10131000BE1669F408C0FD011296E081EAABE7FF52
:10132000C9CFE195EAABFBA9F061FF7D72C08BE20A
:10133000B81609F46AC09EE2B916B1F52EA53FA50C
:101340002F5F3F4FEEA5FFA584918A3221F0B82E82
:1013500020E030E01BC0FD0112964081518157FF13
:1013600002C04FEF5FEF49AB3FA72EA7A3CFC90144
:1013700003E0880F991F0A95E1F7220F331F280F0A
:10138000391F2B0D311D20533040B49031968B2DD9
:1013900080538A3060F3FFA7EEA7A90137FF02C090
:1013A0004FEF5FEF49AB8DCFF0E3BF1631F48BA960
:1013B00084FD80CF80628BAB7DCF8B2D81538930B4
:1013C000E8F420E030E0C901F3E0880F991FFA95B6
:1013D000E1F7220F331F280F391F2B0D311D20532A
:1013E0003040EEA5FFA5CF0101969FA78EA7B49030
:1013F0008B2D80538A3038F32AAB63CF98E6B91629
:1014000051F4EBA9E460EBAB55CFB98253CFFBA904
:10141000F860FBAB4FCF8CE6B81621F49BA9916026
:101420009BAB48CFBD83AC83E3E6BE1639F412967E
:10143000BD83AC8312978C918E8318C1F4E4BF16E0
:1014400039F084E6B81639F099E6B91659F503C0B3
:10145000EBA9E160EBABFBA9F0FF08C01496BD83DC
:10146000AC835E904E903E902E900AC01296BD8343
:10147000AC839E918E911C01442437FC4094542CE3
:1014800057FC03C08AE088AB92C0509440943094DB
:101490002094211C311C411C511C8DE289839AE04F
:1014A00098AB85C0EFE4BE1629F0FFE6BF1639F40D
:1014B00088E061C09BA991609BABE8E056C0F0E773
:1014C000BF1671F41296BD83AC839E918E911C0160
:1014D000442455248BA980648BAB78E7B72E5EC07B
:1014E000E3E7BE16D9F51296BD83AC83DE90CE90AD
:1014F000C114D10489F488E28E838EE68F8385E758
:1015000088878CE689878A8789E28B871C8666E0D4
:10151000C62ED12CCC0EDD1EF9A9F7FD13C04F2F1E
:10152000552747FD509560E070E0C6010E946E2C83
:10153000009711F419A90DC08C1919A981174CF441
:10154000182F07C0F60101900020E9F731971E2FF0
:101550001C1919824201310140E094C085E5B8169A
:1015600031F095E7B91649F4EAE0E8AB1FC0FBA9F2
:10157000F160FBAB8AE088AB19C098E5B91621F0A1
:10158000E8E7BE1609F06EC0FBA9F3FD02C080E1DA
:10159000F2CF211431044104510419F490E198ABC5
:1015A00005C0EBA9E064EBABF0E1F8AB198289A9C7
:1015B00087FD03C09BA99F7D9BAB2114310441048F
:1015C000510461F4E9A9EE2349F466247724430128
:1015D0005EE2C52ED12CCC0EDD1E3EC04EE2C42EE6
:1015E000D12CCC0EDD1EF8A9EF2EFF2400271127E9
:1015F000C201B101A80197010E94292E6A3020F48E
:1016000030E3A32EA60E08C027E5A22EA60E88E57D
:10161000B81611F49FEDA922F601A2926F01C20142
:10162000B101A80197010E94292E39014A012E1407
:101630003F044006510618F019012A01D9CFF8A934
:10164000F83051F48BA983FF07C090E3A91621F06D
:1016500080E3F60182936F01CE018C19182F125D81
:1016600049A910C0BB2009F45CC0BE8219824201A6
:10167000310100E096E0C92ED12CCC0EDD1E11E028
:1016800021E005C0212F042F011B07FD00E0898107
:10169000882319F0812F8F5F07C09BA996FD02C098
:1016A000812F02C0822F8E5FA82EA00EEBA9EE2EF6
:1016B000FF2480E3482E512C4E205F20411451041A
:1016C00021F48AA98A190E94E7088981882329F0D0
:1016D00061E070E0CE01019609C0E6FE09C080E33A
:1016E0008A83BB8262E070E0CE0102960E94080904
:1016F000F0E24F16510421F48AA98A190E94DC08ED
:10170000802F0E94DC08612F772767FD7095C60146
:101710000E940809E4FEAACD8AA98A190E94E70856
:10172000A5CDE2E1CD5C0C94822E82E085BD83EAFA
:1017300084BD17BC88E788BD83EC8093B00086E049
:101740008093B100E0E7F0E0808182608083EEE684
:10175000F0E08081816080838AE08093B300109202
:10176000B20008952091A3013091A4012F5F3F4F53
:10177000820F931F08952091A3013091A401821B31
:10178000930B892F992786958074992708951F9226
:101790000F920FB60F921124EF92FF920F931F93A7
:1017A0002F933F934F935F936F937F938F939F9369
:1017B000AF93BF93CF93DF93EF93FF938091020199
:1017C0008150809302018F3F09F069C083E88093C4
:1017D000B00080918901C82FDD27D093A901C09363
:1017E000A8018091FA04E090F6042091D70130918D
:1017F000D8014091D9015091DA0180FF18C0FF242F
:1018000000271127CA01B90120E830E040E050E08C
:101810000E944B2EC801B7010E94E32D20E032E068
:1018200040E050E00E944B2EC20FD31F17C0FF2490
:1018300000271127CA01B90120E830E040E050E05C
:101840000E944B2EC801B7010E94E32D20E032E038
:1018500040E050E00E944B2EC21BD30BD093A90155
:10186000C093A8012091A8013091A9018091F704AB
:1018700099272817390734F08091F804992782179F
:10188000930724F49093A9018093A8018091A80163
:101890008093B3008091F9048093020104C083E037
:1018A0008093B0005F98FF91EF91DF91CF91BF914E
:1018B000AF919F918F917F916F915F914F913F91E8
:1018C0002F911F910F91FF90EF900F900FBE0F90EF
:1018D0001F9018951F920F920FB60F9211242F93FD
:1018E0003F934F935F936F937F938F939F93AF93A8
:1018F000BF93EF93FF938091AA0181508093AA0137
:101900008F3F01F58AE08093AA01809103018F5FE8
:10191000817080930301882319F481E08093A501ED
:101920008091A3019091A40101969093A4018093CA
:10193000A3018091D001882329F08091D0018150AA
:101940008093D0018091A6019091A701029758F051
:101950008091A6019091A70101979093A701809390
:10196000A6015A9A01C05A988091DC0483FF02C0F4
:101970000E941516FF91EF91BF91AF919F918F91AA
:101980007F916F915F914F913F912F910F900FBE7B
:101990000F901F9018952091A3013091A4012F5F03
:1019A0003F4F280F391F8091A3019091A401A901F5
:1019B000481B590B57FFF7CF089510927C008FEC0E
:1019C00080937A0008951F920F920FB60F92112400
:1019D000EF92FF920F931F932F933F934F935F9339
:1019E0006F937F938F939F93AF93BF93CF93DF9327
:1019F000EF93FF9310927A008091C1018F5F8093E3
:101A0000C1018150E82FFF27E830F10508F0CFC26F
:101A1000E45BFF4F0C949D2E2091D5013091D601AF
:101A20008091780090917900281B390B8091AF014B
:101A30009091B001820F931F9093B0018093AF01FA
:101A40008091B9018F5F8093B9018091FB019091E2
:101A5000FC01A091FD01B091FE01442737FD4095A6
:101A6000542F820F931FA41FB51F8093FB019093E7
:101A7000FC01A093FD01B093FE018091FF019091C4
:101A80000002A0910102B0910202820F931FA41FD5
:101A9000B51F8093FF0190930002A0930102B093C1
:101AA000020281E08093C2018091BF019091C00148
:101AB00001969093C0018093BF017DC26091780030
:101AC000709179008091D3019091D401681B790BBA
:101AD0008091F3019091F401A091F501B091F6018C
:101AE0009B01442737FD4095542F820F931FA41F5D
:101AF000B51F8093F3019093F401A093F501B09387
:101B0000F6018091F7019091F801A091F901B0914F
:101B1000FA01820F931FA41FB51F8093F7019093C2
:101B2000F801A093F901B093FA01809178009091A7
:101B300079000A9710F464E47DEF80917800909129
:101B40007900895E934010F06CEB72E08091AD01FA
:101B50009091AE01860F971F9093AE018093AD01D7
:101B60008091B8018F5F8093B80182E058C0609186
:101B70007800709179008091D1019091D201681B19
:101B8000790B8091EB019091EC01A091ED01B09166
:101B9000EE019B01442737FD4095542F820F931F80
:101BA000A41FB51F8093EB019093EC01A093ED016E
:101BB000B093EE018091EF019091F001A091F101BD
:101BC000B091F201820F931FA41FB51F8093EF0104
:101BD0009093F001A093F101B093F201809178000D
:101BE000909179000A9710F464E47DEF8091780079
:101BF00090917900895E934010F06CEB72E08091D7
:101C0000AB019091AC01860F971F9093AC0180932C
:101C1000AB018091B7018F5F8093B70184E080931F
:101C2000C201C9C140910401509105018091780021
:101C3000909179009A01220F331F240F351F63E022
:101C400070E00E94022E260F371F36952795369595
:101C50002795309305012093040186E0E0CF809121
:101C60001B0590911C052091780030917900821B12
:101C7000930B90937C0480937B048091B1019091AD
:101C8000B20120917B0430917C04820F931F9093CA
:101C9000B2018093B1018091BB018F5F8093BB0142
:101CA00087E0BDCF8091780090917900209119054F
:101CB00030911A05821B930B9093870480938604BE
:101CC0008091B3019091B4012091860430918704F2
:101CD000820F931F9093B4018093B3018091BA0156
:101CE0008F5F8093BA0185E08093C20186E0E4C0F3
:101CF0006091780070917900E0901D05F0901E05CC
:101D000000911F0510912005882777FD8095982F59
:101D10000E94212DA80197010E947B2C0E94042D76
:101D20007093B6016093B5012091B5013091B60171
:101D3000E0917B04F0917C0480918604909187046B
:101D400097FF03C0909581959F4F64E070E00E94DB
:101D5000162EEB01CF01F7FF03C0909581959F4FA1
:101D600064E070E00E94162E260F371F2C0F3D1FD7
:101D70003093B6012093B5018091B5019091B601E1
:101D8000029704F160911D0570911E0580911F0559
:101D90009091200520E030E048E454E40E942B2D8F
:101DA00088230CF03CC060911D0570911E05809148
:101DB0001F05909120052AE037ED43EA5CE30E947D
:101DC0007C2C25C08091B5019091B6018F5F9F4F0B
:101DD00034F560911D0570911E0580911F0590914D
:101DE000200520E030E046E154E40E942E2D181634
:101DF000B4F460911D0570911E0580911F059091AE
:101E000020052AE037ED43EA5CE30E947B2C6093D7
:101E10001D0570931E0580931F059093200581E09A
:101E20008093BC01809178009091790090937E041A
:101E300080937D04209103023091040240910502B9
:101E4000509106028091B5019091B601AA2797FDA5
:101E5000A095BA2F280F391F4A1F5B1F209303023A
:101E6000309304024093050250930602E09003026F
:101E7000F0900402009105021091060260910302A5
:101E800070910402809105029091060220E034E0F6
:101E900040E050E00E944B2EE21AF30A040B150BAF
:101EA000E0920302F09204020093050210930602EE
:101EB00083E08093C20187E08093C1017CC0809160
:101EC0008B0490918C042091780030917900820FDE
:101ED000931F90938C0480938B04809183048F5F75
:101EE0008093830480918304853008F460C08091DE
:101EF00078009091790090930B0180930A011092E1
:101F0000830480917F049091800420918B04309110
:101F10008C04821B930B2091200230912102821BA2
:101F2000930B9093BE018093BD0160918B047091DF
:101F30008C04E0900601F0900701009108011091D7
:101F40000901882777FD8095982FA8019701220F16
:101F5000331F441F551F2E0D3F1D401F511F620F81
:101F6000731F841F951F24E030E040E050E00E9482
:101F70004B2E2093060130930701409308015093A4
:101F8000090120917F043091800480910601909195
:101F90000701A0910801B0910901281B390B30936A
:101FA00021022093200210928C0410928B04109234
:101FB000C2011092C1018091C20180937C008FEC1C
:101FC00080937A00FF91EF91DF91CF91BF91AF9114
:101FD0009F918F917F916F915F914F913F912F9141
:101FE0001F910F91FF90EF900F900FBE0F901F90D9
:101FF0001895CF93DF93A3E0B0E00E94A32E802D2D
:10200000C82FDD27C531D10508F02A97C7BD84E662
:1020100090E00E94CB0C80910A0190910B018255B7
:102020009340D0F4C0E0D0E017C0C7BD82E390E099
:102030000E94CB0C8BEB91E09F938F931F920E9499
:102040001C0980910A0190910B010F900F900F9045
:102050008458934020F02196CA3FD10530F3A3E085
:10206000B0E00C2E0E94B02EC093880488EC90E063
:102070000E94CB0CDF91CF910895E6E1F1E080E280
:10208000819391E0E636F907D9F70895FF920F930F
:102090001F938091C601282F3327C901817090704A
:1020A000682F882391F08091C701882311F0815017
:1020B00002C0809166018093C701E6E1F1E080E211
:1020C000819391E0E636F907D9F7A9014270507083
:1020D00021FF0DC08091C7018F5F8093C701E6E1AA
:1020E000F1E080E2819391E0E636F907D9F76623C3
:1020F00021F0452B11F01092C70181E18093C501B9
:102100008091C70199279F938F9385E994E09F93CE
:102110008F9381E08F930E941C098091C7010F90DB
:102120000F900F900F900F90E82FFF27ED30F105E3
:1021300008F0BCC3EC5AFF4F0C949D2E1092C501C1
:1021400083E894E09F938F9311E01F930E941C09F2
:1021500084E18093C5018CE390E09F938F931F925D
:102160001F928CE794E09F938F931F930E941C090A
:1021700088E28093C5010E94A90399279F938F93BA
:102180008FE694E09F938F931F930E941C098CE32A
:102190008093C5018FE594E09F938F931F930E94D6
:1021A0001C0980C38091DC0480FF44C01092C501EB
:1021B00080912002909121029F938F9380E594E07B
:1021C0009F938F9311E01F930E941C0984E18093D9
:1021D000C50180912202909123029F938F9381E405
:1021E00094E09F938F931F930E941C0988E2809331
:1021F000C50180910A0190910B019F938F9382E317
:1022000094E09F938F931F930E941C098CE380930B
:10221000C5018091880499279F938F9383E294E06E
:102220009F938F931F930E941C098DB79EB744966E
:102230008DBF41C384E18093C5018CE194E09F93FD
:102240008F9311E01F930E941C0988E28093C501BF
:102250008EE094E09F938F931F930E941C098DB78B
:102260009EB70696E5CF1092C50184E094E09F9357
:102270008F9311E01F930E941C0984E18093C50194
:102280006091D7017091D8018091D9019091DA01C4
:1022900020E034E040E050E00E944B2E5F934F93EB
:1022A0003F932F9385EF93E09F938F931F930E940B
:1022B0001C0988E28093C5016091DF017091E00103
:1022C0008091E1019091E20120E034E040E050E0B3
:1022D0000E944B2E5F934F933F932F9386EE93E094
:1022E0009F938F931F930E941C098CE38093C501D9
:1022F00080910702909108029F938F9387ED93E05E
:102300009F938F931F930E941C098DB79EB746968B
:102310008FCF1092C5018091AC049091AD042091B3
:10232000AA043091AB049F938F933F932F9387EC34
:1023300093E09F938F9311E01F930E941C0984E107
:102340008093C5018091B0049091B1042091AE04B6
:102350003091AF049F938F933F932F9387EB93E03C
:102360009F938F931F930E941C0988E28093C5015D
:102370008091B4049091B5042091B2043091B304DB
:102380009F938F933F932F9387EA93E09F938F932D
:102390001F930E941C098CE38093C5018091B604B1
:1023A0009091B7049F938F9387E993E070C0109248
:1023B000C501E091D504FF27EE0FFF1FE855FB4F45
:1023C00020813181E091D404FF27EE0FFF1FE855F3
:1023D000FB4F808191813F932F939F938F9387E849
:1023E00093E09F938F9311E01F930E941C0984E157
:1023F0008093C501E091D704FF27EE0FFF1FE8553A
:10240000FB4F20813181E091D604FF27EE0FFF1FA3
:10241000E855FB4F808191813F932F939F938F933A
:1024200087E793E09F938F931F930E941C0988E294
:102430008093C501E091D904FF27EE0FFF1FE855F7
:10244000FB4F20813181E091D804FF27EE0FFF1F61
:10245000E855FB4F808191813F932F939F938F93FA
:1024600087E693E09F938F931F930E941C098CE350
:102470008093C501E091DA04FF27EE0FFF1FE855B6
:10248000FB4F808191819F938F9387E593E09F938A
:102490008F931F930E941C098DB79EB74A96C8CE92
:1024A0001092C50189E493E09F938F9311E01F93ED
:1024B0000E941C0984E18093C5012091D1013091D3
:1024C000D2018091AB019091AC016091B7013F9333
:1024D0002F9377270E94162E7F936F938AE393E0C2
:1024E0009F938F931F930E941C0988E28093C501DC
:1024F0002091D3013091D4018091AD019091AE0132
:102500006091B8013F932F9377270E94162E7F93F7
:102510006F938BE293E09F938F931F930E941C090C
:102520008CE38093C5012091D5013091D601809133
:10253000AF019091B0016091B9013F932F9377273C
:102540000E94162E7F936F938CE193E09F938F935D
:102550001F935BC01092C5018FE093E09F938F9310
:1025600081E0F82EFF920E941C0984E18093C5014E
:102570002091190530911A058091B3019091B40111
:102580006091BA013F932F9377270E94162E7F9375
:102590006F9380E093E09F938F93FF920E941C09BA
:1025A00088E28093C50120911B0530911C05809124
:1025B000B1019091B2016091BB013F932F937727B6
:1025C0000E94162E7F936F9381EF92E09F938F93DB
:1025D000FF920E941C098CE38093C50160911D0548
:1025E00070911E0580911F059091200500917D043A
:1025F00010917E040E94042D7F936F931F930F937D
:1026000082EE92E09F938F93FF920E941C098DB7F8
:102610009EB748960DCE84E18093C5018091040158
:10262000909105019F938F9383ED92E09F938F93F9
:1026300011E01F930E941C0988E28093C5018091DC
:10264000180299279F938F9384EC92E09F938F9326
:102650001F930E941C098DB79EB70A96E9CD109270
:10266000C50185EB92E09F938F9311E01F930E9429
:102670001C0984E18093C50180910B0290910C02AA
:102680009F938F9386EA92E09F938F931F930E946C
:102690001C0988E28093C50180910702909108028D
:1026A0009F938F9387E992E09F938F931F930E944C
:1026B0001C098CE38093C5018091090290910A0264
:1026C0009F938F9388E892E0E8C01092C5018091B3
:1026D0001002909111029F938F938CE792E09F9349
:1026E0008F9311E01F930E941C0984E18093C50120
:1026F00080911202909113029F938F9380E792E052
:102700009F938F931F930E941C0988E28093C501B9
:1027100080911402909115029F938F9384E692E02A
:102720009F938F931F930E941C098CE38093C50194
:1027300080911602909117029F938F9388E592E003
:102740006FCD1092C50180E592E09F938F9311E0C9
:102750001F930E941C0984E18093C5018091890127
:1027600099279F938F9382E492E09F938F931F9377
:102770000E941C0988E28093C5018091A801909174
:10278000A9019F938F9384E392E09F938F931F936C
:102790000E941C098CE38093C5018091F80499275D
:1027A0009F938F938091F70499279F938F9386E24D
:1027B00092E09F938F931F930E941C0936CD109235
:1027C000C5018EE192E09F938F9311E01F930E94C9
:1027D0001C0984E18093C50180918D04992787FDB0
:1027E00090959F938F938FE092E09F938F931F9389
:1027F0000E941C0988E28093C50180918E0499276C
:1028000087FD90959F938F9380E092E09F938F93A5
:102810001F930E941C098CE38093C50180918F0453
:10282000992787FD90959F938F9381EF91E035C015
:102830001092C50187EE91E09F938F9311E01F9353
:102840000E941C0984E18093C501809190049091BD
:1028500091049F938F9389ED91E09F938F931F93A2
:102860000E941C0988E28093C50180919204909196
:1028700093049F938F938BEC91E09F938F931F937F
:102880000E941C098CE38093C5018091940490916F
:1028900095049F938F938DEB91E09F938F931F935C
:1028A0000E941C098DB79EB74296C2CC815080937E
:1028B00066011092C7011092C6011F910F91FF90FF
:1028C00008951F920F920FB60F9211242F933F93EA
:1028D0004F938F939F9380919604833019F08430A7
:1028E000A1F508C08EB58093C8011EBC84E080931A
:1028F00096042BC08091C8019927382F22278EB5C6
:102900009927282B392BC9018D509E4F875E934004
:10291000D0F480919904853019F0863069F406C0AE
:1029200030939B0420939A0486E00BC030939D045F
:1029300020939C0487E005C030939F0420939E045D
:1029400085E080939904109296049F918F914F9106
:102950003F912F910F900FBE0F901F901895A0E1FF
:10296000B0E0E5EBF4E10C94662EE090F104FF2476
:1029700033E0EE0CFF1C3A95E1F700271127609138
:10298000D7017091D8018091D9019091DA01A80105
:1029900097010E944B2E59016A01C9010E94C91773
:1029A0006D877E878F87988BC5010E94291869875C
:1029B0007A878B879C876091DF017091E00180911D
:1029C000E1019091E201A80197010E944B2E79014B
:1029D0008A01C9010E94C9176D837E838F839887FE
:1029E000C7010E94291869837A838B839C83A090F6
:1029F0009A04B0909B0480918D04992787FD90954F
:102A0000A81AB90A80909C0490909D0480918E042D
:102A1000992787FD9095881A990A40909E045090B6
:102A20009F0480918F04992787FD9095481A590A31
:102A30002090900430909104C0909204D090930420
:102A4000C214D304D0F4609094047090950462147E
:102A5000730498F4710100271127B401882777FDCA
:102A60008095982FA80197010E94E32D9601442795
:102A700055270E944B2E49011CC02C143D0448F5DB
:102A800060909404709095046C147D0410F57601A8
:102A900000271127B501882777FD8095982FA80179
:102AA00097010E94E32D9101442755270E944B2E48
:102AB0005901B201882777FD8095982FA8019701C9
:102AC0000E94E32D9301442755270E944B2E290194
:102AD00024C0E0909404F090950400271127B501DC
:102AE000882777FD8095982FA80197010E94E32DF4
:102AF0009101442755270E944B2E5901B401882784
:102B000077FD8095982FA80197010E94E32D9601EB
:102B1000442755270E944B2E4901B0926D04A09284
:102B20006C0490926F0480926E04509271044092F3
:102B30007004B501882777FD8095982F0E94212D7C
:102B400029853A854B855C850E949B2D5B016C0134
:102B5000B401882777FD8095982F0E94212D7B0155
:102B60008C012D813E814F8158850E949B2D2D85A2
:102B70003E854F8558890E949B2D9B01AC01C60163
:102B8000B5010E947C2C3B014C01B201882777FDE6
:102B90008095982F0E94212D5B016C0129813A813B
:102BA0004B815C81C801B7010E949B2D7B018C0188
:102BB0002D813E814F815885C601B5010E949B2D14
:102BC0009B01AC01C801B7010E947C2C0E94042D1E
:102BD0007B018C0129813A814B815C81C601B50161
:102BE0000E949B2D2D853E854F8558890E949B2DE7
:102BF0009B01AC01C401B3010E947B2C0E94042DF7
:102C0000DC01CB01B7010E9421179C0197FF05C091
:102C100088279927821B930B04C088E691E0821BCA
:102C2000930BE2E1C05F0C94822E80919604813078
:102C300041F0813018F0823049F51CC02A9A81E0B9
:102C400016C02A9880919904853011F481E305C05B
:102C5000863011F482E301C083E38EBD88E090E00A
:102C60000E94B20B909398048093970482E0809323
:102C70009604089580919704909198040E94BB0B4C
:102C8000882321F01EBC83E0809396040895A0E081
:102C9000B0E0EDE4F6E10C94682E299A2898EE2431
:102CA000FF2400E010E0AA24BB24CC24DD24662409
:102CB00077248824992462E3462E552480919A042F
:102CC00090919B04081719072CF400919A04109115
:102CD0009B040BC080919A0490919B048E159F05D4
:102CE00024F4E0909A04F0909B0480919C049091CD
:102CF0009D04C816D9062CF4C0909C04D0909D0465
:102D00000BC080919C0490919D048A159B0524F42E
:102D1000A0909C04B0909D0480919E0490919F048B
:102D2000881699062CF480909E0490909F040BC006
:102D300080919E0490919F048615970524F46090DD
:102D40009E0470909F04552081F485B191E08927FD
:102D500085B985B192E0892785B982E390E09093A7
:102D6000A7018093A60152E3552E8AE090E00E94CD
:102D7000B20BEC01CE010E94BB0B8823D9F3E0918A
:102D8000D604FF27EE0FFF1FE855FB4F808191818E
:102D9000843691050CF44A94442011F05A948ECF55
:102DA000C8018E199F099093910480939004C601E5
:102DB0008A199B099093930480939204C401861905
:102DC00097099093950480939404EDE8F4E0C8018A
:102DD0008E0D9F1D62E070E00E94162E60938D04A0
:102DE000C6018A0D9B1D62E070E00E94162E609362
:102DF0008E04C401860D971D62E070E00E94162EBD
:102E000060938F0489E0ACE2B1E0182E0E94BC2EE2
:102E1000E0E1CDB7DEB70C94842E83ED8CBD84B198
:102E2000846A84B95B9885E0809399041092960433
:102E300089E0EDE8F4E0ACE2B1E0182E0E94AB2EA0
:102E400008951F93CF93DF93EC01892B31F4611523
:102E5000710519F480E090E08EC077FD02C011E0AA
:102E600001C01FEF209729F48AE51802C001112440
:102E700082C0882777FD8095982F22E330E040E0DC
:102E800050E00E94E32D9E01442737FD4095542FCA
:102E90000E944B2EF90137FF03C0F095E195FF4FDB
:102EA00041E0EE30F40734F4E656FB4F8491282FCE
:102EB000332747C056E1E737F5071CF02AE530E035
:102EC00040C087E0E637F8071CF029E530E039C05C
:102ED00044E0EE37F4071CF028E530E032C053E060
:102EE000E433F5071CF027E530E02BC082E0E03842
:102EF000F8071CF026E530E024C042E0E830F40793
:102F00001CF025E530E01DC051E0E83BF5071CF062
:102F100024E530E016C081E0EC37F8071CF023E52B
:102F200030E00FC041E0EF34F4071CF022E530E060
:102F300008C0EB52F1401CF021E530E002C020E572
:102F400030E01C161D066CF4812F992787FD9095A3
:102F5000AC01249FC001259F900D349F900D11243A
:102F60000AC011162CF484EB90E0821B930B03C073
:102F7000C901845B9040DF91CF911F910895FC01BE
:102F800025913491FC01329645915491CA01B901C1
:102F90000895A0E0B0E0EFECF7E10C94702E9C01F6
:102FA00097FD04C041E0C42ED12C06C03095219578
:102FB0003F4F9FEFC92ED92E2B3531055CF0C9014B
:102FC0008B5590408A35910540F484EB90E0821B4C
:102FD000930B9C01C1E0D0E010C0C901855B90401B
:102FE0008A35910518F4245B304005C088E691E0ED
:102FF000821B930B9C01CFEFDFEF220F331F220FB9
:10300000331FC90188559A4F0E94BF177B018C015D
:10301000B601882777FD8095982F0E94212D9B016E
:10302000AC01C801B7010E949B2D7B018C01BE0140
:10303000882777FD8095982F0E94212D9B01AC0158
:10304000C801B7010E949B2DE8E0CDB7DEB70C9414
:103050008C2E2AE530E0281B390BC9010E94C917C4
:1030600008951092B9008AE28093B800089585EA25
:103070008093BC00089584E98093BC0008958093F8
:10308000BB0085E88093BC00089585EC8093BC006C
:10309000089585E88093BC0008951F920F920FB6A3
:1030A0000F9211248F939F93EF93FF938091C90107
:1030B0008F5F8093C90181508330E9F1843028F417
:1030C000813081F0823078F508C08530D9F18530C3
:1030D000B8F1863009F04FC03EC08091CA01880F18
:1030E0008E5A12C08091CA018F5F8093CA018150AD
:1030F000813081F0813030F0823079F0833009F016
:1031000041C00EC0809160028093BB0085E880932F
:10311000BC0038C080916102F7CF80916402F4CF87
:1031200080916502F1CF8091CA01843010F4109231
:10313000C90185EAECCF8091CB01880F8D5AE4CF8D
:1031400085ECE5CFE091CB01FF278091BB00E056F5
:10315000FB4F8083DBCF8091CB01E82FFF2790913D
:10316000BB00EC55FB4F90838F5F8093CB01843085
:1031700010F01092CB0184E98093BC001092C90139
:103180001092CA01FF91EF919F918F910F900FBE06
:103190000F901F90189583EC80938100EFE6F0E08C
:1031A0008081806280831092D6011092D5011092A6
:1031B000D4011092D3011092D2011092D10108953E
:1031C0001F920F920FB60F9211240F931F932F93FC
:1031D0003F934F935F936F937F938F939F93AF939F
:1031E000BF93CF93DF93EF93FF93209186003091AD
:1031F00087008091CE019091CF01281B390B8091DF
:103200008600909187009093CF018093CE01C901F1
:103210008D5D95408356994148F481E090E090930C
:10322000CD018093CC011092670154C0C091CC01B4
:10323000D091CD01CA30D1050CF04CC0C9018B5FD3
:103240009040845B914008F040C0A901425D51402C
:10325000FE01EE0FFF1FE855FB4F80819181FA01BF
:10326000E81BF90BCF01F7FF03C0909581959F4FA5
:1032700006974CF480911802883C28F4809118023B
:10328000865F80931802FE01EE0FFF1F8F01085525
:103290001B4FD8012D913C91C901880F991F820FB6
:1032A000931F840F951F64E070E00E94162ED801D2
:1032B0008D919C9111979B01281B390BE254FB4F78
:1032C0003183208311967C936E932196D093CD0108
:1032D000C093CC01FF91EF91DF91CF91BF91AF915E
:1032E0009F918F917F916F915F914F913F912F911E
:1032F0001F910F910F900FBE0F901F901895AF92D6
:10330000BF92CF92DF92EF92FF920F931F93109292
:103310007A008091B701882369F08091AB01909188
:10332000AC016091B70177270E94162E70931105AA
:10333000609310058091B801882369F08091AD01F8
:103340009091AE016091B80177270E94162E70937C
:103350000F0560930E058091B901882369F0809173
:10336000AF019091B0016091B90177270E94162EAC
:1033700070932505609324058091BA018823D9F1C3
:103380006091B3017091B4012091BA01E0902105E0
:10339000F09022050027F7FC0095102F57016801D7
:1033A00083E0AA0CBB1CCC1CDD1C8A95D1F7AE189F
:1033B000BF08C00AD10A882777FD8095982FB4E00E
:1033C000660F771F881F991FBA95D1F733274427B7
:1033D00055270E944B2EA20EB31EC41ED51EC60139
:1033E000B50128E030E040E050E00E944B2E3093E1
:1033F0002205209321058091BB018823D9F160919A
:10340000B1017091B2012091BB01E0902A05F090CA
:103410002B050027F7FC0095102F57016801A3E04A
:10342000AA0CBB1CCC1CDD1CAA95D1F7AE18BF089A
:10343000C00AD10A882777FD8095982FF4E0660F9F
:10344000771F881F991FFA95D1F7332744275527EF
:103450000E944B2EA20EB31EC41ED51EC601B5017E
:1034600028E030E040E050E00E944B2E30932B05E6
:1034700020932A058091BC018823A1F16091B501B8
:103480007091B6012091BC01E0901305F0901405F5
:103490000027F7FC0095102F57016801E3E0AA0C04
:1034A000BB1CCC1CDD1CEA95D1F7AE18BF08C00AC6
:1034B000D10A882777FD8095982F332744275527F1
:1034C0000E944B2EA20EB31EC41ED51EC601B5010E
:1034D00028E030E040E050E00E944B2E309314058D
:1034E000209313051092AC011092AB011092B7011A
:1034F0001092AE011092AD011092B8011092B0017D
:103500001092AF011092B9011092B2011092B10164
:103510001092BB011092B4011092B3011092BA0143
:103520001092B6011092B5011092BC018091FB017E
:103530009091FC01A091FD01B091FE018093E70103
:103540009093E801A093E901B093EA018091EB0127
:103550009091EC01A091ED01B091EE018093D70123
:103560009093D801A093D901B093DA018091F3012F
:103570009091F401A091F501B091F6018093DF01E3
:103580009093E001A093E101B093E2018091EF01FB
:103590009091F001A091F101B091F2018093DB01D3
:1035A0009093DC01A093DD01B093DE018091F701DF
:1035B0009091F801A091F901B091FA018093E30193
:1035C0009093E401A093E501B093E6018FEC809322
:1035D0007A0020911002309111028091D804E82FD6
:1035E000FF27EE0FFF1FE855FB4F80819181825925
:1035F0009F4F281739071CF42F5F3F4F0CC0808165
:10360000918182599F4F821793074CF42115310500
:1036100031F021503040309311022093100220915C
:103620001202309113028091D904E82FFF27EE0F88
:10363000FF1FE855FB4F8081918182599F4F2817CA
:1036400039071CF42F5F3F4F0CC080819181825954
:103650009F4F821793074CF42115310531F021500B
:1036600030403093130220931202209114023091C3
:1036700015028091DA04E82FFF27EE0FFF1FE855AF
:10368000FB4F8081918182599F4F281739071CF485
:103690002F5F3F4F0CC08081918182599F4F8217CD
:1036A00093074CF42115310531F02150304030930F
:1036B0001502209314022091160230911702809176
:1036C000DB04E82FFF27EE0FFF1FE855FB4F80813B
:1036D000918182599F4F281739071CF42F5F3F4F64
:1036E0000CC08081918182599F4F821793074CF4BF
:1036F0002115310531F021503040309317022093CD
:103700001602809110029091110297FF05C010924D
:103710001102109210020AC08F3F910539F034F067
:103720008FEF90E09093110280931002809112022B
:103730009091130297FF05C010921302109212028B
:103740000AC08F3F910539F034F08FEF90E09093ED
:10375000130280931202809114029091150297FF38
:1037600005C010921502109214020AC08F3F9105F5
:1037700039F034F08FEF90E09093150280931402AB
:10378000809116029091170297FF05C010921702C0
:10379000109216020AC08F3F910539F034F08FEF76
:1037A00090E090931702809316021F910F91FF9063
:1037B000EF90DF90CF90BF90AF90089510927A0075
:1037C0008091B701882369F08091AB019091AC01A1
:1037D0006091B70177270E94162E709311056093B0
:1037E00010058091B801882369F08091AD01909116
:1037F000AE016091B80177270E94162E70930F05D5
:1038000060930E058091B901882369F08091AF0122
:103810009091B0016091B90177270E94162E7093A4
:103820002505609324058091BA018823D1F0609129
:10383000B3017091B4012091BA01882777FD80957A
:10384000982FF4E0660F771F881F991FFA95D1F71C
:103850003327442755270E944B2E3093220520936F
:1038600021058091BB018823D1F06091B101709155
:10387000B2012091BB01882777FD8095982FE4E065
:10388000660F771F881F991FEA95D1F733274427C2
:1038900055270E944B2E30932B0520932A058091AB
:1038A000BC01882399F06091B5017091B601209117
:1038B000BC01882777FD8095982F3327442755270B
:1038C0000E944B2E30931405209313051092AC01E7
:1038D0001092AB011092B7011092AE011092AD019F
:1038E0001092B8011092B0011092AF011092B9017C
:1038F0001092B2011092B1011092BB011092B4016A
:103900001092B3011092BA011092B6011092B50153
:103910001092BC018FEC80937A00209110023091BC
:1039200011028091D804E82FFF27EE0FFF1FE85502
:10393000FB4F8081918182599F4F281739071CF4D2
:103940002F5F3F4F0CC08081918182599F4F82171A
:1039500093074CF42115310531F02150304030935C
:1039600011022093100220911202309113028091D3
:10397000D904E82FFF27EE0FFF1FE855FB4F80818A
:10398000918182599F4F281739071CF42F5F3F4FB1
:103990000CC08081918182599F4F821793074CF40C
:1039A0002115310531F0215030403093130220931E
:1039B000120220911402309115028091DA04E82F4E
:1039C000FF27EE0FFF1FE855FB4F80819181825941
:1039D0009F4F281739071CF42F5F3F4F0CC0808181
:1039E000918182599F4F821793074CF4211531051D
:1039F00031F0215030403093150220931402209171
:103A00001602309117028091DB04E82FFF27EE0F9A
:103A1000FF1FE855FB4F8081918182599F4F2817E6
:103A200039071CF42F5F3F4F0CC080819181825970
:103A30009F4F821793074CF42115310531F0215027
:103A4000304030931702209316028091100290911B
:103A5000110297FF05C010921102109210020AC0C5
:103A60008F3F910539F034F08FEF90E09093110281
:103A700080931002809112029091130297FF05C06B
:103A800010921302109212020AC08F3F910539F072
:103A900034F08FEF90E090931302809312028091A4
:103AA00014029091150297FF05C010921502109212
:103AB00014020AC08F3F910539F034F08FEF90E087
:103AC0009093150280931402809116029091170230
:103AD00097FF05C0109217021092160208958F3FAB
:103AE000910539F034F08FEF90E0909317028093B6
:103AF000160208951F938091DF048B3F98F08B3F4F
:103B000019F4809110020EC08C3F19F480911202BA
:103B100009C08D3F19F48091140204C08E3F21F436
:103B2000809116028093810180918101882319F48C
:103B30001092810104C08F3F11F480938101809124
:103B4000DE048B3F98F08B3F19F4809110020EC079
:103B50008C3F19F48091120209C08D3F19F48091B5
:103B6000140204C08E3F21F48091160280938001DC
:103B700080918001882319F41092800105C0843659
:103B800018F084E6809380018091E0048B3F98F0E8
:103B90008B3F19F4809110020EC08C3F19F4809174
:103BA000120209C08D3F19F48091140204C08E3FA7
:103BB00021F48091160280938201809182018823F2
:103BC00019F41092820105C0843618F084E68093BF
:103BD00082018091E2048B3F98F08B3F19F4809131
:103BE00010020EC08C3F19F48091120209C08D3F63
:103BF00019F48091140204C08E3F21F480911602C2
:103C00008093830180918301882319F410928301AA
:103C100004C08F3F11F4809383018091E9048B3FAE
:103C200098F08B3F19F4809110020EC08C3F19F46C
:103C30008091120209C08D3F19F48091140204C0D2
:103C40008E3F21F48091160280938401809184013B
:103C5000882319F41092840104C08F3F11F48093DB
:103C600084018091EA048B3F98F08B3F19F4809196
:103C700010020EC08C3F19F48091120209C08D3FD2
:103C800019F48091140204C08E3F21F48091160231
:103C900080938501809185018B3010F48AE002C009
:103CA0008F3F11F4809385018091EB048B3F98F056
:103CB0008B3F19F4809110020EC08C3F19F4809153
:103CC000120209C08D3F19F48091140204C08E3F86
:103CD00021F48091160280938601809186018823C9
:103CE00019F41092860104C08F3F11F4809386016D
:103CF0008091F0048B3F98F08B3F19F48091100273
:103D00000EC08C3F19F48091120209C08D3F19F446
:103D10008091140204C08E3F21F48091160280939A
:103D2000880180918801882319F41092880104C0C9
:103D30008F3F11F4809388018091F1048B3F98F0BC
:103D40008B3F19F4809110020EC08C3F19F48091C2
:103D5000120209C08D3F19F48091140204C08E3FF5
:103D600021F48091160280932402809124028823FA
:103D700019F41092240204C08F3F11F4809324029E
:103D80008091F2048B3F98F08B3F19F480911002E0
:103D90000EC08C3F19F48091120209C08D3F19F4B6
:103DA0008091140204C08E3F21F48091160280930A
:103DB000250280912502882319F41092250204C05F
:103DC0008F3F11F4809325028091F3048B3F98F08C
:103DD0008B3F19F4809110020EC08C3F19F4809132
:103DE000120209C08D3F19F48091140204C08E3F65
:103DF00021F4809116028093260280912602882366
:103E000019F41092260204C08F3F11F48093260209
:103E10008091F4048B3F98F08B3F19F4809110024D
:103E20000EC08C3F19F48091120209C08D3F19F425
:103E30008091140204C08E3F21F480911602809379
:103E4000270280912702882319F41092270204C0C8
:103E50008F3F11F4809327029091F5049B3FB0F0BF
:103E60009B3F19F48091100204C09C3F29F480917B
:103E70001202809389010CC09D3F19F480911402B5
:103E8000F8CF9E3F29F480911602F3CF90938901D9
:103E900080918901882319F41092890104C08F3F11
:103EA00011F4809389019B3FB0F09B3F19F48091FE
:103EB000100204C09C3F29F4809112028093890172
:103EC0000CC09D3F19F480911402F8CF9E3F29F455
:103ED00080911602F3CF9093890180918901882304
:103EE00019F41092890104C08F3F11F48093890165
:103EF0009B3FB0F09B3F19F48091100204C09C3F9F
:103F000029F480911202809389010CC09D3F19F41D
:103F100080911402F8CF9E3F29F480911602F3CFCE
:103F20009093890180918901882319F41092890165
:103F300004C08F3F11F48093890110918801612F93
:103F4000772767FD7095872F972F0E94212D17FFE8
:103F500006C020E030E040E853E40E947C2C27E1DA
:103F600037EB41ED58E30E949B2D60937C017093E9
:103F70007D0180937E0190937F018091E70480937F
:103F800023058091E604809312051F91089581E036
:103F90008093D40442E04093D50483E08093D60418
:103FA00094E09093D70435E03093D80486E0809372
:103FB000D90487E08093DA041092DC048EE18093C8
:103FC000DD048BEF8093DF048AE08093E00422E33A
:103FD0002093DE042093E2044093E1049093E304F1
:103FE0001092E40490E19093E5048FE08093E6045E
:103FF0008AEF8093E7048AE18093E8049093E904D0
:104000008FEA8093EA048093EB048AE58093EC04C2
:1040100083E28093ED0484E18093EE041092EF0438
:104020003093F00482EB8093F1041092F20410922A
:10403000F3041092F40484E68093F50488E28093FC
:10404000F6041092FA042093F70486E98093F804AA
:104050003093F904A2E0B5E0E8E6F1E08CE00190ED
:104060000D928150E1F7089581E08093D40452E0ED
:104070005093D50483E08093D60444E04093D70462
:1040800035E03093D80486E08093D90487E08093AC
:10409000DA0428E02093DB041092DC049EE1909384
:1040A000DD048BEF8093DF048AE08093E00486E4F4
:1040B0008093DE049093E2045093E1044093E30480
:1040C0002093E40490E19093E5048FE08093E6046C
:1040D0008AEF8093E7048AE18093E8049093E904EF
:1040E00088E78093EA0496E99093EB048AE580934D
:1040F000EC0483E28093ED0484E18093EE0410925B
:10410000EF043093F00482EB8093F1041092F204F8
:104110001092F3041092F40484E68093F50488E28C
:104120008093F6041092FA0482E38093F70490934C
:10413000F8043093F904A2E0B5E0E0E7F1E08CE0A8
:1041400001900D928150E1F7089580911F0288231C
:1041500001F51092610210926002109264021092B6
:10416000650280919601882311F08093600280910E
:104170009701882311F08093610280919801882330
:1041800011F08093650280919901882311F080934A
:104190006402809160029927909373048093720463
:1041A00080916102992790937504809374048091A3
:1041B0006502992790937704809376048091640236
:1041C000992790937904809378041092C9011092F2
:1041D000CA010E9437180895CF93DF9310921A05F1
:1041E0001092190510921C0510921B0580E090E0BA
:1041F000A0E0B0E080931D0590931E05A0931F05DD
:10420000B09320051092D2011092D1011092D401E6
:104210001092D3011092D6011092D5010E94DE1B9C
:1042200085E090E00E94B20BEC01CE010E94BB0B36
:104230008823D9F30E94DE1B8091DC0480FF10C02C
:1042400080910A0190910B01875B934038F4809133
:104250000A0190910B018E5E924010F40E94F90FBA
:10426000809110059091110597FF03C0909581955D
:104270009F4F9093D2018093D10180910E05909130
:104280000F0597FF03C0909581959F4F9093D401A0
:104290008093D301809124059091250597FF03C059
:1042A000909581959F4F9093D6018093D50188E09A
:1042B000E9E1F5E0A5E3B1E0182E0E94AB2E1092E3
:1042C000EB011092EC011092ED011092EE011092B0
:1042D000EF011092F0011092F1011092F201109290
:1042E000F3011092F4011092F5011092F601109270
:1042F000F7011092F8011092F9011092FA01109250
:10430000FB011092FC011092FD011092FE0110922F
:1043100011051092100510920F0510920E051092C3
:104320002505109224058091060190910701A09126
:104330000801B09109019093800480937F0410924A
:10434000BE011092BD01109203021092040210925D
:104350000502109206028091070290910802909344
:104360000A02809309020E94442C82E390E0909319
:10437000A7018093A601DF91CF910895CF93DF939A
:1043800010921A051092190510921C0510921B0527
:1043900080E090E0A0E0B0E080931D0590931E05C2
:1043A000A0931F05B09320050E94DE1B85E090E0DE
:1043B0000E94B20BEC01CE010E94BB0B8823D9F303
:1043C0000E94DE1B809121059091220597FF03C07A
:1043D000909581959F4F60E170E00E94162EC9E193
:1043E000D5E070931A056093190580912A05909184
:1043F0002B0597FF03C0909581959F4F60E170E07A
:104400000E94162E70931C0560931B0560917D041D
:1044100070917E04882777FD8095982F0E94212D2A
:1044200060931D0570931E0580931F0590932005D2
:1044300088E0A5E3B1E0FE01182E0E94BC2EDF91BA
:10444000CF9108951F93182F0EC080911F028823CB
:1044500061F484E690E09093A7018093A6018AEF2F
:1044600090E00E94CB0C115080F71F910895A6E0B8
:10447000B0E0EDE3F2E20C94662E0E947F19299AD7
:10448000E091D604FF27EE0FFF1FE855FB4F408059
:10449000518048E750E0440E551E57FE02C04424A8
:1044A000552480911802843608F048C0809101019B
:1044B000882331F484EF91E09093A7018093A601C3
:1044C0008091300290913102009731F001979093E2
:1044D00031028093300204C010921F0210920E022B
:1044E000289A80912B0290912C02815D974018F1BF
:1044F0008091ED04482E552481E080930E02E091D6
:10450000D404FF27EE0FFF1FE855FB4F11821082E6
:10451000E091D504FF27EE0FFF1FE855FB4F1182F6
:104520001082E091D704FF27EE0FFF1FE855FB4FE5
:1045300011821082CBC110921F02C8C18091180253
:104540008D3808F4C3C110920E028091EE0422E36C
:10455000829FC0011124909331028093300269E25E
:10456000461651046CF080912B0290912C027FEF43
:104570008F3F970781F1019690932C0280932B0235
:1045800080912B0290912C02883C910520F088E2CA
:104590004816510404F510924602109247021092F8
:1045A0004802109249021092420210924302109265
:1045B0004402109245021092FB011092FC011092ED
:1045C000FD011092FE011092FF0110920002109264
:1045D00001021092020299EC491651040CF4D6C063
:1045E00080911F02882309F071C1E091D704FF2751
:1045F000EE0FFF1FE855FB4F808191818C349105B0
:104600000CF4C1C080912F028F5F80932F02893CF0
:1046100008F45CC129980E94EC2010921F021092AD
:104620002F0210922C0210922B028091D404282F7A
:104630003327F901EE0FFF1FE855FB4F8081918171
:10464000873491059CF4E091D504FF27EE0FFF1FFE
:10465000E855FB4F0190F081E02DF7FF03C0F09586
:10466000E195FF4FE734F1050CF46CC08091D5045F
:10467000682F7727DB01AA0FBB1FA855BB4F8D9171
:104680009C911197873491053CF0F901EE0FFF1FC3
:10469000E855FB4F808191818D919C9187349105E4
:1046A00064F0F901EE0FFF1FE855FB4F8081918107
:1046B0008734910514F042E001C041E0FB01EE0FA8
:1046C000FF1FE855FB4F80819181863491055CF492
:1046D000F901EE0FFF1FE855FB4F80819181873470
:1046E00091050CF043E0FB01EE0FFF1FE855FB4F77
:1046F000808191818A5B9F4F5CF4F901EE0FFF1F6F
:10470000E855FB4F80819181873491050CF044E09E
:10471000660F771F68557B4FFB01808191818A5B13
:104720009F4F5CF4220F331F28553B4FD9018D91C9
:104730009C91863491050CF445E0A2E0B0E0042E93
:104740000E94B02E0E94A9034AE364ED74E00E9427
:10475000CA030E94A9030E9422228091DC0480FFE8
:10476000B5C080910A0190910B01875B934040F4A2
:1047700080910A0190910B018E5E924008F0A6C0D4
:104780000E94F90FA3C010922F02A0C0F3E24F16AF
:1047900051040CF09BC08091D704482F5527FA0193
:1047A000EE0FFF1FE855FB4F80819181855B9F4F86
:1047B0000CF06DC080912E028F5F80932E02893C99
:1047C00008F467C088EC80932E0281E090E090931B
:1047D0002C0280932B0281E080931F0210923E02F4
:1047E00010923F0210924002109241021092FB017F
:1047F0001092FC011092FD011092FE011092FF0137
:104800001092000210920102109202021092EB012B
:104810001092EC011092ED011092EE011092F30152
:104820001092F4011092F5011092F6018091D701D7
:104830009091D801A091D901B091DA018093EF0154
:104840009093F001A093F101B093F2018091DF0108
:104850009091E001A091E101B091E2018093F70114
:104860009093F801A093F901B093FA0110924602D7
:10487000109247021092480210924902109242028E
:1048800010924302109244021092450202C010920C
:104890002E02440F551F48555B4FDA018D919C91B4
:1048A0008C3491058CF080912D028F5F80932D02C6
:1048B000893C60F010921F0288EC80932D021092C8
:1048C0002C0210922B0202C010922D0280916701DF
:1048D000815080936701809167018F3F29F080911B
:1048E0000E02882309F412C10E947A1DE091D404BB
:1048F000FF27EE0FFF1FDF01A855BB4F8D919C9145
:104900006091E3047727E254FB4F2081318140918D
:10491000E4045527FC01E69FC001E79F900DF69F38
:10492000900D1124D901A49F9001A59F300DB49F33
:10493000300D1124820F931F90931A028093190255
:10494000E091D504FF27EE0FFF1FDF01A855BB4FF5
:104950008D919C91E254FB4F20813181FC01E69FB7
:10496000C001E79F900DF69F900D1124B901649F3F
:104970009001659F300D749F300D1124820F931F9D
:1049800090931C0280931B02E091D704FF27EE0F47
:10499000FF1FE855FB4F80819181909581959F4F36
:1049A00090931E0280931D0210918501612F77273D
:1049B00067FD7095872F972F0E94212D17FF06C046
:1049C00020E030E040E853E40E947C2C20E030E01E
:1049D00040E251E40E947C2C20E030E040E85BE3C0
:1049E0000E949B2D5B016C01609326057093270547
:1049F000809328059093290510918601612F7727D0
:104A000067FD7095872F972F0E94212D17FF06C0F5
:104A100020E030E040E853E40E947C2C20E030EEBF
:104A20004BE257E40E94BE2C609315057093160567
:104A300080931705909318058091DC0482FF0CC0C9
:104A400080E090E0A0E0B0E080931505909316051B
:104A5000A0931705B093180520E030E040E050E047
:104A6000C601B5010E942B2D882364F480E090E0FC
:104A7000A0E0B0E08093260590932705A093280539
:104A8000B093290520E030E040E050E0609115054A
:104A90007091160580911705909118050E942B2D95
:104AA000882364F480E090E0A0E0B0E080931505F6
:104AB00090931605A0931705B093180580910E02E8
:104AC000882321F110921E0210921D0210921A02E8
:104AD0001092190210921C0210921B028DEC9CEC99
:104AE000ACECBDE38093260590932705A0932805A1
:104AF000B09329058AE097EDA3EABBE380931505FF
:104B000090931605A0931705B09318058091BF01E7
:104B10009091C0018D54914008F477C0A090D701C6
:104B2000B090D801C090D901D090DA018091DB011A
:104B30009091DC018A199B0990933502809334028D
:104B40004091DF015091E0016091E1017091E2013B
:104B50002091E3013091E401241B350B30933302A3
:104B6000209332021092C0011092BF01873A910542
:104B700034F08091D1019091D201019608C08A55FC
:104B80009F4F4CF48091D1019091D2010197909365
:104B9000D2018093D101273A310534F08091D301BD
:104BA0009091D401019608C02A553F4F4CF4809152
:104BB000D3019091D40101979093D4018093D301B4
:104BC00010927A00A092EF01B092F001C092F10130
:104BD000D092F2014093F7015093F8016093F901EC
:104BE0007093FA018091E7019091E801A091E901A9
:104BF000B091EA018093FF0190930002A09301021B
:104C0000B09302028FEC80937A00E090E804FF24D6
:104C1000002711276091D7017091D8018091D901A7
:104C20009091DA01A80197010E944B2E80912105F5
:104C300090912205AA2797FDA095BA2F281B390B22
:104C40004A0B5B0BCA01B90120E130E040E050E0C3
:104C50000E944B2E59016A0120933A0230933B0285
:104C600040933C0250933D026091DF017091E0015E
:104C70008091E1019091E201A80197010E944B2EE1
:104C800080912A0590912B05AA2797FDA095BA2F10
:104C9000281B390B4A0B5B0BCA01B90120E130E03C
:104CA00040E050E00E944B2E2093360230933702B2
:104CB0004093380250933902E5EFAE16E1E0BE06AC
:104CC000E0E0CE06E0E0DE062CF084EF91E0A0E02C
:104CD000B0E00DC0FCE0AF16FEEFBF06FFEFCF0661
:104CE000FFEFDF0664F48CE09EEFAFEFBFEF809341
:104CF0003A0290933B02A0933C02B0933D02253FC1
:104D000061E0360760E0460760E056072CF084EF6C
:104D100091E0A0E0B0E009C02C503E4F4F4F5F4FF4
:104D200064F48CE09EEFAFEFBFEF80933602909378
:104D30003702A0933802B093390210927A00809122
:104D4000EB019091EC01A091ED01B091EE01209169
:104D50003A0230913B0240913C0250913D02821B4D
:104D6000930BA40BB50B8093EB019093EC01A093F4
:104D7000ED01B093EE018091F3019091F401A091C7
:104D8000F501B091F6012091360230913702409141
:104D9000380250913902821B930BA40BB50B809300
:104DA000F3019093F401A093F501B093F601809084
:104DB0001D0290901E02540197FE04C0AA24BB2439
:104DC000A818B90885E1A816B1043CF08091DC046C
:104DD00084FD03C081E080938A01E090E504CC2447
:104DE000B7FCC094DC2CB401882777FD8095982F00
:104DF0002E2D3327442755270E94E32D9B01AC011C
:104E0000C601B5010E94E32D20E032E040E050E011
:104E10000E944B2E89019A01FF24E89CC001E99C65
:104E2000900DF89C900D112464E070E00E94162E05
:104E3000600F711F882777FD8095982F60933E0241
:104E400070933F0280934002909341022091FB01B6
:104E50003091FC014091FD015091FE01261B370B62
:104E6000480B590B2093FB013093FC014093FD014B
:104E70005093FE018091FB019091FC01A091FD01F6
:104E8000B091FE018155934CA040B04064F080E5A4
:104E900093ECA0E0B0E08093FB019093FC01A09321
:104EA000FD01B093FE018091FB019091FC01A09166
:104EB000FD01B091FE01805B9C43AF4FBF4F64F496
:104EC00080EB9CE3AFEFBFEF8093FB019093FC017D
:104ED000A093FD01B093FE018FEC80937A00809146
:104EE000DC0483FFA7C080910D02815080930D02E6
:104EF0008F3FD9F40E94AF14909308028093070269
:104F00002091090230910A02821B930B845E9D4F0F
:104F100068E671E00E94162E845B904090930C022C
:104F200080930B0282E380930D026091D701709110
:104F3000D8018091D9019091DA0120E032E040E07F
:104F400050E00E944B2E890137FF03C01095019558
:104F50001F4F6091DF017091E0018091E10190911C
:104F6000E20120E032E040E050E00E944B2EB90127
:104F700037FF03C0709561957F4F601771070CF480
:104F8000B8016332710574F480918A01882351F06D
:104F9000809107029091080290930A02809309027F
:104FA00010928A01209184013327629FC001639F80
:104FB000900D729F900D112460E470E00E94162EF7
:104FC000A901461B570B1416150674F510927A00AA
:104FD0000091FB011091FC012091FD013091FE0137
:104FE00080910B0290910C02BC01469FC001479F2B
:104FF000900D569F900D112460E270E00E94162ED5
:10500000882777FD8095982F060F171F281F391FB7
:105010000093FB011093FC012093FD013093FE01EE
:105020008FEC80937A0006C084E690E09093A7010D
:105030008093A601809159048F5F809359048091D9
:1050400028028150809328028F3F09F066C081E3D7
:1050500080932802E090E804FF2400271127609144
:10506000D7017091D8018091D9019091DA01A801FE
:1050700097010E944B2E30935B0420935A04609159
:10508000DF017091E0018091E1019091E201A801BE
:1050900097010E944B2E30935D0420935C04809115
:1050A00021059091220590935F0480935E04809186
:1050B0002A0590912B059093610480936004809160
:1050C0002405909125059093630480936204809158
:1050D0002002909121029093650480936404609172
:1050E000030270910402809105029091060220E073
:1050F00032E040E050E00E944B2E30936704209352
:10510000660450926904409268048091070290916D
:10511000080290936B0480936A0460901505709068
:1051200016058090170590901805A0902605B09060
:105130002705C0902805D09029056091D70170916E
:10514000D8018091D9019091DA010E94212DA4010A
:1051500093010E949B2D7B018C0160911005709141
:105160001105882777FD8095982F0E94212DA60193
:1051700095010E949B2D9B01AC01C801B7010E94C3
:105180007C2C0E94042D1B01709311056093100567
:105190006091DF017091E0018091E1019091E20165
:1051A0000E94212DA40193010E949B2D7B018C0163
:1051B00060910E0570910F05882777FD8095982FD7
:1051C0000E94212DA60195010E949B2D9B01AC01FF
:1051D000C801B7010E947C2C0E94042D7E836D8340
:1051E00070930F0560930E0560912405709125055D
:1051F000882777FD8095982F0E94212D7B018C01B7
:1052000020E030E040E05FE3C601B5010E949B2D45
:105210009B01AC01C801B7010E949B2D7B018C0151
:105220006091E7017091E8018091E9019091EA01B4
:105230000E94212DA40193010E949B2D9B01AC0192
:10524000C801B7010E947C2C0E94042D9B01709321
:1052500025056093240571E0271678E037061CF0D9
:1052600080E098E007C080E0281688EF380634F424
:1052700080E098EF9093110580931005AD81BE8179
:10528000A150B8401CF080E098E007C04D815E81DD
:105290004050584F34F480E098EF90930F0580937E
:1052A0000E0578E0213037071CF080E098E005C05B
:1052B0002050384F34F480E098EF90932505809388
:1052C00024058091DC04992780FFBEC020918101D4
:1052D00081FF0EC02233B0F4809120029091210210
:1052E0004497909323028093220210920F020DC0E4
:1052F0008091E104289FC0011124449790932302D8
:105300008093220281E080930F0280910E02882315
:1053100021F010922302109222022091200230915B
:1053200021024091220250912302421753070CF0B0
:105330008BC080910F02882309F486C0241B350B93
:10534000809182019927DC012A9FC0012B9F900D3B
:105350003A9F900D112460E170E00E94162E8201A8
:10536000061B170B2091BD013091BE018091800179
:105370009927FC012E9FC0012F9F900D3E9F900DFD
:10538000112468E070E00E94162E061B170B609136
:10539000030270910402809105029091060220E0C0
:1053A00032E040E050E00E944B2ECA01B90120914A
:1053B00083013327442755270E94E32D20E230E064
:1053C00040E050E00E944B2EFFEF2E3C3F0714F4CC
:1053D0002EEC3FEF8091290290912A02AC0164E00B
:1053E000440F551F6A95E1F7481B590B23333105CC
:1053F00014F022E330E0021B130BCA01800F911F4F
:1054000060E170E00E94162E70932A0260932902D8
:105410008091DD049927681779073CF448165906EE
:105420005CF090932A028093290280912902909146
:105430002A024816590624F450922A024092290260
:105440004090290250902A02C0902405D090250552
:1054500080913E0290913F02C81AD90A25E6C216F1
:10546000D10424F014E6C12ED12C09C04CE9C41695
:105470004FEFD40624F4BCE9CB2EBFEFDB2E6091B6
:1054800078017091790180917A0190917B01698313
:105490007A838B839C832091190230911A02809128
:1054A0004A0290914B02281B390B609110057091B4
:1054B0001105621B730B882777FD8095982F0E943A
:1054C000212D9B01AC0169817A818B819C810E9495
:1054D0009B2D0E94042DFB01709363026093620276
:1054E0008B01222717FD2095322F80914602909143
:1054F0004702A0914802B0914902080F191F2A1FC4
:105500003B1F0093460210934702209348023093BA
:1055100049021016110612061306ACF4C80117FF53
:1055200003C0909581959F4F60E071E00E94162E18
:105530006F5F7F4F882777FD8095982F061B170B8D
:10554000280B390B14C0C80117FF03C09095819533
:105550009F4F60E071E00E94162E6F5F7F4F88279B
:1055600077FD8095982F060F171F281F391F00936E
:1055700046021093470220934802309349028091DB
:10558000460290914702A0914802B09149028138A9
:105590007EE3970770E0A70770E0B7072CF080E87C
:1055A0009EE3A0E0B0E009C08058914CAF4FBF4FE0
:1055B00064F480E891ECAFEFBFEF809346029093E4
:1055C0004702A0934802B093490280907C019090DA
:1055D0007D01A0907E01B0907F01BF01882777FDFB
:1055E0008095982F0E94212D7B018C0160914602AD
:1055F0007091470280914802909149020E94212DAA
:105600009B01AC01C501B4010E949B2D9B01AC0123
:10561000C801B7010E947C2C0E94042D9601260F20
:10562000371F240D351D66244AE04416510414F436
:10563000A1E06A2E37FD02C0662019F040E050E07C
:1056400008C080912305482F5527241735070CF4EF
:10565000A90180911205282E3324910124163506C4
:105660000CF49A0120936002C201861B970BBC01C7
:105670006C0D7D1D77FD02C0662019F080E090E082
:1056800007C0809123059927681779070CF4CB018F
:105690009101281639060CF49C0120936102209197
:1056A0001B0230911C0280914C0290914D02281BEC
:1056B000390B60910E0570910F05621B730B8827E3
:1056C00077FD8095982F0E94212D9B01AC01698167
:1056D0007A818B819C810E949B2D0E94042DFB016D
:1056E00070935F0260935E028B01222717FD209565
:1056F000322F8091420290914302A0914402B091D6
:105700004502080F191F2A1F3B1F009342021093E6
:1057100043022093440230934502101611061206EC
:105720001306ACF4C80117FF03C0909581959F4FF5
:1057300060E071E00E94162E6F5F7F4F882777FD33
:105740008095982F061B170B280B390B14C0C80126
:1057500017FF03C0909581959F4F60E071E00E9414
:10576000162E6F5F7F4F882777FD8095982F060F45
:10577000171F281F391F00934202109343022093E2
:105780004402309345028091420290914302A091DD
:105790004402B091450281382EE3920720E0A2072F
:1057A00020E0B2072CF080E89EE3A0E0B0E009C062
:1057B0008058914CAF4FBF4F64F480E891ECAFEF4D
:1057C000BFEF8093420290934302A0934402B093B0
:1057D0004502BF01882777FD8095982F0E94212DD3
:1057E0007B018C01609142027091430280914402DE
:1057F000909145020E94212D9B01AC01C501B4018D
:105800000E949B2D9B01AC01C801B7010E947C2C1A
:105810000E94042D9201260F371F2C193D0937FDD8
:1058200002C0662019F040E050E008C080912305D6
:10583000482F5527241735070CF4A9019101241688
:1058400035060CF49A0120936502461A570AB201F4
:105850006C197D0977FD02C0662019F020E030E068
:1058600008C080912305282F3327621773070CF493
:105870009B01C101221633060CF4C9018093640216
:10588000E2E1CA5F0C94822E80914E0290914F0209
:10589000A0915002B091510280935602909357020A
:1058A000A0935802B09359028091520290915302F2
:1058B000A0915402B091550280935A0290935B02DA
:1058C000A0935C02B0935D02089510924B02109277
:1058D0004A0210924D0210924C020895FC01415070
:1058E000504030F001900616D1F73197CF0108955E
:1058F0008827992708955058192EEFD001D0D2C08B
:10590000BA176207730784079507B1F188F40EF49C
:1059100010940B2EBA2FA02D062E622F202D072EAD
:10592000732F302D082E842F402D092E952F502DAA
:10593000FF275523B9F0591B49F0573E98F046957B
:1059400037952795A795F0405395C9F776F0BA0F8C
:10595000621F731F841F30F4879577956795B795FD
:10596000F040939517FA0F2E0895BF1BBB27BA0B73
:10597000620B730B840BF6CFDEF6DBC0AED001D02A
:1059800091C0552359F0992369F09F575F57951B94
:1059900033F442F4903811F4915805C09BC09158EB
:1059A0009F3F09F4C6C0BB27112462177307840701
:1059B00030F4660F771F881FBB1F915098F311D0EA
:1059C0000F920FD00F920DD0A0E826173707480787
:1059D0001B0609F0A048BA2F602D7F918F910024FB
:1059E0000895A0E80024621773078407B10528F022
:1059F000621B730B840BB1090A2A660F771F881F7D
:105A0000BB1FA69581F7089597FB73D09F3738F099
:105A1000FEE9F91B982F872F762F6B2F05C086C0C4
:105A20009695879577956795F150D0F73EF49095C8
:105A30008095709561957F4F8F4F9F4F0895E894A3
:105A400003C097FB0EF4F3DFB62F672F782F892F53
:105A50009EE9002427C00ED05EF004C00BD026F0D3
:105A600001C008D019F020F48FEF089580E0089568
:105A700081E0089597FB092E052600F8689430D040
:105A8000E89407FC07C0621773078407950721F0A5
:105A900008F400940794989408959A95BB0F661F94
:105AA000771F881F11249923A1F08823B2F79F3F05
:105AB00059F0BB0F48F421F4002011F460FF04C03A
:105AC0006F5F7F4F8F4F9F4F881F9795879597F9EF
:105AD00008952CC09FEF80EC0895052E092607FA43
:105AE000440F551F5F3F79F0AA27A51708F051E032
:105AF0004795880F991F9F3F31F0BB27B91708F0D2
:105B000091E0879508959F919F911124E3CF97FB92
:105B1000880F991F9F3F31F0BB27B91708F091E01C
:105B2000879508959F919F911124D4CF6627772759
:105B3000882799270895D1DF01D0B4CF992339F070
:105B4000552329F09F575F57950F13F49AF1F1CF22
:105B500091589F3FE1F3629FA12D0F92BB27639F56
:105B6000A00DB11DEE27729FA00DB11DEE1FAF93CA
:105B7000AA27649FB00DE11D739FB00DE11DAA1F00
:105B80006627829FB00DE11DA61F5527749FE00D6B
:105B9000A11D551F839FE00DA11D561F849FA00DC1
:105BA000511D852F7A2F6E2F1F900F9088231AF486
:105BB000939539F48FCF000C111CBB1F661F771F04
:105BC000881F01280895629FD001739FF001829F72
:105BD000E00DF11D649FE00DF11D929FF00D839F7C
:105BE000F00D749FF00D659FF00D9927729FB00D19
:105BF000E11DF91F639FB00DE11DF91FBD01CF012C
:105C000011240895AA1BBB1B51E107C0AA1FBB1F8B
:105C1000A617B70710F0A61BB70B881F991F5A9538
:105C2000A9F780959095BC01CD01089597FB092EA9
:105C300007260AD077FD04D0E5DF06D000201AF44D
:105C4000709561957F4F0895F6F7909581959F4FD8
:105C50000895A1E21A2EAA1BBB1BFD010DC0AA1FAD
:105C6000BB1FEE1FFF1FA217B307E407F50720F0C5
:105C7000A21BB30BE40BF50B661F771F881F991F40
:105C80001A9469F760957095809590959B01AC0189
:105C9000BD01CF01089597FB092E05260ED057FDB3
:105CA00004D0D7DF0AD0001C38F4509540953095C9
:105CB00021953F4F4F4F5F4F0895F6F79095809590
:105CC000709561957F4F8F4F9F4F08952F923F9210
:105CD0004F925F926F927F928F929F92AF92BF92FC
:105CE000CF92DF92EF92FF920F931F93CF93DF93A8
:105CF000CDB7DEB7CA1BDB0B0FB6F894DEBF0FBE05
:105D0000CDBF09942A88398848885F846E847D8451
:105D10008C849B84AA84B984C884DF80EE80FD8053
:105D20000C811B81AA81B981CE0FD11D0FB6F894C9
:105D3000DEBF0FBECDBFED010895EE0FFF1F059032
:105D4000F491E02D0994F999FECFB2BDA1BDF89A66
:105D5000119600B40895F7DF01921A94E1F70895BF
:105D6000F999FECFB2BDA1BD00BC11960FB6F89453
:105D7000FA9AF99A0FBE08950190F2DF1A94E1F7AA
:045D80000895FFCFB4
:105D840001640A016400007D0000FF0301020304B2
:105D940005060708090A48616C6C6F2057656C7426
:105DA40000000000000000000000000000000000EF
:105DB40000000000000000000000000000000000DF
:105DC40000000000000000000000000000000000CF
:105DD40000000000000000000000000000000000BF
:105DE4000000000000000C014B616D657261000051
:105DF4004E6F726D616C00000000803F17B7D138A0
:0C5E040030FB103A403296020A640100A4
:00000001FF
/branches/v0.60_MicroMag3_Nick666/trunc/Flight-Ctrl_MEGA644_V0_60_MM3.lss
0,0 → 1,9337
 
Flight-Ctrl_MEGA644_V0_60_MM3.elf: file format elf32-avr
 
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 0000008c 00800100 00005d84 00005e38 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 00005d84 00000000 00000000 000000b4 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 000003a0 0080018c 0080018c 00005ec4 2**0
ALLOC
3 .eeprom 0000013d 00810000 00810000 00005ec4 2**0
CONTENTS, ALLOC, LOAD, DATA
4 .stab 00000378 00000000 00000000 00006004 2**2
CONTENTS, READONLY, DEBUGGING
5 .stabstr 00000071 00000000 00000000 0000637c 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
 
00000000 <__vectors>:
0: 0c 94 8a 03 jmp 0x714 ; 0x714 <__ctors_end>
4: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
8: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
c: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
10: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
14: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
18: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
1c: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
20: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
24: 0c 94 c7 0b jmp 0x178e ; 0x178e <__vector_9>
28: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
2c: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
30: 0c 94 e0 18 jmp 0x31c0 ; 0x31c0 <__vector_12>
34: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
38: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
3c: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
40: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
44: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
48: 0c 94 6a 0c jmp 0x18d4 ; 0x18d4 <__vector_18>
4c: 0c 94 61 14 jmp 0x28c2 ; 0x28c2 <__vector_19>
50: 0c 94 cc 05 jmp 0xb98 ; 0xb98 <__vector_20>
54: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
58: 0c 94 96 05 jmp 0xb2c ; 0xb2c <__vector_22>
5c: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
60: 0c 94 e3 0c jmp 0x19c6 ; 0x19c6 <__vector_24>
64: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
68: 0c 94 4d 18 jmp 0x309a ; 0x309a <__vector_26>
6c: 0c 94 a7 03 jmp 0x74e ; 0x74e <__bad_interrupt>
70: 43 08 sbc r4, r3
72: bd 08 sbc r11, r13
74: bd 08 sbc r11, r13
76: bd 08 sbc r11, r13
78: 75 08 sbc r7, r5
7a: 56 08 sbc r5, r6
7c: bd 08 sbc r11, r13
7e: bd 08 sbc r11, r13
80: bd 08 sbc r11, r13
82: a1 08 sbc r10, r1
84: a1 08 sbc r10, r1
86: a1 08 sbc r10, r1
88: a1 08 sbc r10, r1
8a: a1 08 sbc r10, r1
8c: 79 08 sbc r7, r9
8e: bd 08 sbc r11, r13
90: bd 08 sbc r11, r13
92: 68 08 sbc r6, r8
94: bd 08 sbc r11, r13
96: 71 08 sbc r7, r1
98: 0c 0d add r16, r12
9a: 5e 0d add r21, r14
9c: b7 0d add r27, r7
9e: 12 0e add r1, r18
a0: 2f 0e add r2, r31
a2: 52 0e add r5, r18
a4: 78 0e add r7, r24
a6: 5f 0f add r21, r31
a8: 9e 10 cpse r9, r14
aa: d2 10 cpse r13, r2
ac: 33 11 cpse r19, r3
ae: 89 11 cpse r24, r9
b0: d7 11 cpse r29, r7
b2: 50 12 cpse r5, r16
b4: aa 12 cpse r10, r26
b6: 0b 13 cpse r16, r27
b8: 2f 13 cpse r18, r31
ba: 65 13 cpse r22, r21
bc: a1 13 cpse r26, r17
be: df 13 cpse r29, r31
c0: 18 14 cp r1, r8
 
000000c2 <__c.2026>:
c2: 0a 0a 0d 00 ....
 
000000c6 <__c.2024>:
c6: 4e 65 75 74 72 61 6c 00 Neutral.
 
000000ce <__c.2022>:
ce: 48 65 61 64 69 6e 67 48 6f 6c 64 00 HeadingHold.
 
000000da <__c.2020>:
da: 0a 0d 53 74 65 75 65 72 75 6e 67 3a 20 00 ..Steuerung: .
 
000000e8 <__c.2018>:
e8: 4f 4b 0a 0d 00 OK...
 
000000ed <__c.2013>:
ed: 0a 0d 41 62 67 6c 65 69 63 68 20 4c 75 66 74 64 ..Abgleich Luftd
fd: 72 75 63 6b 73 65 6e 73 6f 72 2e 2e 00 rucksensor...
 
0000010a <__c.2011>:
10a: 0a 0d 4b 61 6c 69 62 72 69 65 72 65 20 4e 65 75 ..Kalibriere Neu
11a: 74 72 61 6c 6c 61 67 65 00 trallage.
 
00000123 <__c.2009>:
123: 0a 0d 4b 61 6c 69 62 72 69 65 72 65 20 4b 6f 6d ..Kalibriere Kom
133: 70 61 73 73 00 pass.
 
00000138 <__c.2004>:
138: 0a 0d 42 65 6e 75 74 7a 65 20 50 61 72 61 6d 65 ..Benutze Parame
148: 74 65 72 73 61 74 7a 20 25 64 00 tersatz %d.
 
00000153 <__c.1998>:
153: 0a 0d 49 6e 69 74 2e 20 45 45 50 52 4f 4d 3a 20 ..Init. EEPROM:
163: 47 65 6e 65 72 69 65 72 65 20 44 65 66 61 75 6c Generiere Defaul
173: 74 2d 50 61 72 61 6d 65 74 65 72 2e 2e 2e 00 t-Parameter....
 
00000182 <__c.1996>:
182: 0a 0d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ..==============
192: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
...
 
000001a3 <__c.1994>:
1a3: 0a 0d 46 6c 69 67 68 74 43 6f 6e 74 72 6f 6c 20 ..FlightControl
1b3: 56 25 64 2e 25 64 20 00 V%d.%d .
 
000001bb <__c.1996>:
1bb: 2e 00 ..
 
000001bd <__c.2096>:
1bd: 5a 5f 52 61 6e 67 65 3a 20 20 25 34 69 00 Z_Range: %4i.
 
000001cb <__c.2094>:
1cb: 59 5f 52 61 6e 67 65 3a 20 20 25 34 69 00 Y_Range: %4i.
 
000001d9 <__c.2092>:
1d9: 58 5f 52 61 6e 67 65 3a 20 20 25 34 69 00 X_Range: %4i.
 
000001e7 <__c.2090>:
1e7: 4d 4d 33 20 52 61 6e 67 65 00 MM3 Range.
 
000001f1 <__c.2087>:
1f1: 5a 5f 4f 66 66 73 65 74 3a 20 20 25 33 69 00 Z_Offset: %3i.
 
00000200 <__c.2085>:
200: 59 5f 4f 66 66 73 65 74 3a 20 20 25 33 69 00 Y_Offset: %3i.
 
0000020f <__c.2083>:
20f: 58 5f 4f 66 66 73 65 74 3a 20 20 25 33 69 00 X_Offset: %3i.
 
0000021e <__c.2081>:
21e: 4d 4d 33 20 4f 66 66 00 MM3 Off.
 
00000226 <__c.2078>:
226: 52 61 6e 67 65 3a 25 33 69 2d 25 33 69 00 Range:%3i-%3i.
 
00000234 <__c.2076>:
234: 53 74 65 6c 6c 75 6e 67 3a 20 25 33 69 00 Stellung: %3i.
 
00000242 <__c.2074>:
242: 53 65 74 70 6f 69 6e 74 20 20 25 33 69 00 Setpoint %3i.
 
00000250 <__c.2072>:
250: 53 65 72 76 6f 20 20 00 Servo .
 
00000258 <__c.2069>:
258: 50 6f 74 69 34 3a 20 20 25 33 69 00 Poti4: %3i.
 
00000264 <__c.2067>:
264: 50 6f 74 69 33 3a 20 20 25 33 69 00 Poti3: %3i.
 
00000270 <__c.2065>:
270: 50 6f 74 69 32 3a 20 20 25 33 69 00 Poti2: %3i.
 
0000027c <__c.2063>:
27c: 50 6f 74 69 31 3a 20 20 25 33 69 00 Poti1: %3i.
 
00000288 <__c.2060>:
288: 53 74 61 72 74 3a 20 20 20 20 20 25 35 69 00 Start: %5i.
 
00000297 <__c.2058>:
297: 4d 65 73 73 77 65 72 74 3a 20 20 25 35 69 00 Messwert: %5i.
 
000002a6 <__c.2056>:
2a6: 52 69 63 68 74 75 6e 67 3a 20 20 25 35 69 00 Richtung: %5i.
 
000002b5 <__c.2054>:
2b5: 4b 6f 6d 70 61 73 73 20 20 20 20 20 20 20 00 Kompass .
 
000002c4 <__c.2051>:
2c4: 45 6d 70 66 2e 50 65 67 65 6c 3a 25 35 69 00 Empf.Pegel:%5i.
 
000002d3 <__c.2049>:
2d3: 53 70 61 6e 6e 75 6e 67 3a 20 20 25 35 69 00 Spannung: %5i.
 
000002e2 <__c.2046>:
2e2: 48 6f 63 68 20 25 34 69 20 28 25 33 69 29 00 Hoch %4i (%3i).
 
000002f1 <__c.2044>:
2f1: 52 6f 6c 6c 20 25 34 69 20 28 25 33 69 29 00 Roll %4i (%3i).
 
00000300 <__c.2042>:
300: 4e 69 63 6b 20 25 34 69 20 28 25 33 69 29 00 Nick %4i (%3i).
 
0000030f <__c.2040>:
30f: 41 43 43 20 2d 20 53 65 6e 73 6f 72 00 ACC - Sensor.
 
0000031c <__c.2037>:
31c: 47 69 65 72 20 25 34 69 20 28 25 33 69 29 00 Gier %4i (%3i).
 
0000032b <__c.2035>:
32b: 52 6f 6c 6c 20 25 34 69 20 28 25 33 69 29 00 Roll %4i (%3i).
 
0000033a <__c.2033>:
33a: 4e 69 63 6b 20 25 34 69 20 28 25 33 69 29 00 Nick %4i (%3i).
 
00000349 <__c.2031>:
349: 47 79 72 6f 20 2d 20 53 65 6e 73 6f 72 00 Gyro - Sensor.
 
00000357 <__c.2028>:
357: 50 33 3a 25 34 69 20 20 4b 61 6e e4 6c 65 20 00 P3:%4i Kan.le .
 
00000367 <__c.2026>:
367: 50 31 3a 25 34 69 20 20 50 32 3a 25 34 69 20 00 P1:%4i P2:%4i .
 
00000377 <__c.2024>:
377: 47 73 3a 25 34 69 20 20 47 69 3a 25 34 69 20 00 Gs:%4i Gi:%4i .
 
00000387 <__c.2022>:
387: 4e 69 3a 25 34 69 20 20 52 6f 3a 25 34 69 20 00 Ni:%4i Ro:%4i .
 
00000397 <__c.2019>:
397: 4b 37 3a 25 34 69 20 20 4b 61 6e e4 6c 65 20 00 K7:%4i Kan.le .
 
000003a7 <__c.2017>:
3a7: 4b 35 3a 25 34 69 20 20 4b 36 3a 25 34 69 20 00 K5:%4i K6:%4i .
 
000003b7 <__c.2015>:
3b7: 4b 33 3a 25 34 69 20 20 4b 34 3a 25 34 69 20 00 K3:%4i K4:%4i .
 
000003c7 <__c.2013>:
3c7: 4b 31 3a 25 34 69 20 20 4b 32 3a 25 34 69 20 00 K1:%4i K2:%4i .
 
000003d7 <__c.2010>:
3d7: 4b 6f 6d 70 61 73 73 3a 20 20 20 25 35 69 00 Kompass: %5i.
 
000003e6 <__c.2008>:
3e6: 52 6f 6c 6c 3a 20 20 20 20 20 20 25 35 69 00 Roll: %5i.
 
000003f5 <__c.2006>:
3f5: 4e 69 63 6b 3a 20 20 20 20 20 20 25 35 69 00 Nick: %5i.
 
00000404 <__c.2004>:
404: 61 6b 74 2e 20 4c 61 67 65 00 akt. Lage.
 
0000040e <__c.2001>:
40e: 48 f6 68 65 6e 72 65 67 65 6c 75 6e 67 00 H.henregelung.
 
0000041c <__c.1999>:
41c: 4b 65 69 6e 65 20 00 Keine .
 
00000423 <__c.1997>:
423: 4f 66 66 20 20 20 20 20 20 3a 20 25 35 69 00 Off : %5i.
 
00000432 <__c.1995>:
432: 4c 75 66 74 64 72 75 63 6b 3a 20 25 35 69 00 Luftdruck: %5i.
 
00000441 <__c.1993>:
441: 53 6f 6c 6c 48 6f 65 68 65 3a 20 25 35 69 00 SollHoehe: %5i.
 
00000450 <__c.1991>:
450: 48 6f 65 68 65 3a 20 20 20 20 20 25 35 69 00 Hoehe: %5i.
 
0000045f <__c.1987>:
45f: 28 63 29 20 48 6f 6c 67 65 72 20 42 75 73 73 00 (c) Holger Buss.
 
0000046f <__c.1985>:
46f: 53 65 74 74 69 6e 67 3a 20 25 64 20 00 Setting: %d .
 
0000047c <__c.1983>:
47c: 56 25 64 2e 25 64 00 V%d.%d.
 
00000483 <__c.1981>:
483: 2b 2b 20 4d 69 6b 72 6f 4b 6f 70 74 65 72 20 2b ++ MikroKopter +
493: 2b 00 +.
 
00000495 <__c.1978>:
495: 5b 25 69 5d 00 [%i].
 
0000049a <pgm_atan>:
49a: 00 01 02 03 05 06 07 08 09 0a 0b 0c 0d 0f 10 11 ................
4aa: 12 13 14 15 16 17 18 19 1a 1b 1b 1c 1d 1e 1f 20 ...............
4ba: 21 21 22 23 24 25 25 26 27 27 28 29 29 2a 2b 2b !!"#$%%&''())*++
4ca: 2c 2c 2d 2e 2e 2f 2f 30 30 31 31 32 32 33 33 34 ,,-..//001122334
4da: 34 34 35 35 36 36 36 37 37 38 38 38 39 39 39 3a 445566677888999:
4ea: 3a 3a 3b 3b 3b 3c 3c 3c 3c 3d 3d 3d 3d 3e 3e 3e ::;;;<<<<====>>>
4fa: 3e 3f 3f 3f 3f 40 40 40 40 41 41 41 41 41 42 42 >????@@@@AAAAABB
50a: 42 42 42 43 43 43 43 43 43 44 44 44 44 44 44 45 BBBCCCCCCDDDDDDE
51a: 45 45 45 45 45 45 46 46 46 46 46 46 46 46 47 47 EEEEEEFFFFFFFFGG
52a: 47 47 47 47 47 47 48 48 48 48 48 48 48 48 48 49 GGGGGGHHHHHHHHHI
53a: 49 49 49 49 49 49 49 49 49 4a 4a 4a 4a 4a 4a 4a IIIIIIIIIJJJJJJJ
54a: 4a 4a 4a 4a 4a 4b 4b 4b 4b 4b 4b 4b 4b 4b 4b 4b JJJJJKKKKKKKKKKK
55a: 4b 4b 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c KKLLLLLLLLLLLLLL
56a: 4c 4d 4d 4d 4d 4d 4d 4d 4d 4d 4d 4d 4d 4d 4d 4d LMMMMMMMMMMMMMMM
57a: 4d 4d 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e 4e MMNNNNNNNNNNNNNN
58a: 4e 4e 4e 4e 4e 4e 4f 4f 4f 4f 4f 4f 4f 4f 4f 4f NNNNNNOOOOOOOOOO
59a: 4f 4f 4f 4f 4f 4f 4f 4f 4f 4f 4f 4f 4f 4f OOOOOOOOOOOOOO
 
000005a8 <pgm_sinus_f>:
5a8: 00 00 00 00 56 f8 8e 3c c7 f2 0e 3d 46 5e 56 3d ....V..<...=F^V=
5b8: 7f dc 8e 3d b0 7e b2 3d 0a 13 d6 3d 9d 96 f9 3d ...=.~.=...=...=
5c8: 65 83 0e 3e 5e 30 20 3e d5 d0 31 3e 6f 63 43 3e e..>^0 >..1>ocC>
5d8: ce e6 54 3e 8e 59 66 3e 60 ba 77 3e ed 83 84 3e ..T>.Yf>`.w>...>
5e8: 55 20 8d 3e be b1 95 3e 7a 37 9e 3e dd b0 a6 3e U .>...>z7.>...>
5f8: 42 1d af 3e ff 7b b7 3e 70 cc bf 3e e8 0d c8 3e B..>.{.>p..>...>
608: c8 3f d0 3e 6a 61 d8 3e 2d 72 e0 3e 71 71 e8 3e .?.>ja.>-r.>qq.>
618: 92 5e f0 3e f7 38 f8 3e 00 00 00 3f 89 d9 03 3f .^.>.8.>...?...?
628: cb a8 07 3f 76 6d 0b 3f 44 27 0f 3f e7 d5 12 3f ...?vm.?D'.?...?
638: 17 79 16 3f 8c 10 1a 3f fe 9b 1d 3f 24 1b 21 3f .y.?...?...?$.!?
648: ba 8d 24 3f 7c f3 27 3f 25 4c 2b 3f 71 97 2e 3f ..$?|.'?%L+?q..?
658: 22 d5 31 3f f4 04 35 3f a7 26 38 3f ff 39 3b 3f ".1?..5?.&8?.9;?
668: bd 3e 3e 3f a6 34 41 3f 7c 1b 44 3f 09 f3 46 3f .>>?.4A?|.D?..F?
678: 12 bb 49 3f 60 73 4c 3f bd 1b 4f 3f f2 b3 51 3f ..I?`sL?..O?..Q?
688: cf 3b 54 3f 1e b3 56 3f ae 19 59 3f 51 6f 5b 3f .;T?..V?..Y?Qo[?
698: d7 b3 5d 3f 14 e7 5f 3f db 08 62 3f 01 19 64 3f ..]?.._?..b?..d?
6a8: 5d 17 66 3f ca 03 68 3f 1d de 69 3f 34 a6 6b 3f ].f?..h?..i?4.k?
6b8: eb 5b 6d 3f 20 ff 6e 3f b2 8f 70 3f 82 0d 72 3f .[m? .n?..p?..r?
6c8: 70 78 73 3f 63 d0 74 3f 3f 15 76 3f ea 46 77 3f pxs?c.t??.v?.Fw?
6d8: 4d 65 78 3f 52 70 79 3f e2 67 7a 3f ec 4b 7b 3f Mex?Rpy?.gz?.K{?
6e8: 5c 1c 7c 3f 24 d9 7c 3f 36 82 7d 3f 80 17 7e 3f \.|?$.|?6.}?..~?
6f8: fd 98 7e 3f 9e 06 7f 3f 5b 60 7f 3f 2f a6 7f 3f ..~?...?[`.?/..?
708: 13 d8 7f 3f 05 f6 7f 3f 00 00 80 3f ...?...?...?
 
00000714 <__ctors_end>:
714: 11 24 eor r1, r1
716: 1f be out 0x3f, r1 ; 63
718: cf ef ldi r28, 0xFF ; 255
71a: d0 e1 ldi r29, 0x10 ; 16
71c: de bf out 0x3e, r29 ; 62
71e: cd bf out 0x3d, r28 ; 61
 
00000720 <__do_copy_data>:
720: 11 e0 ldi r17, 0x01 ; 1
722: a0 e0 ldi r26, 0x00 ; 0
724: b1 e0 ldi r27, 0x01 ; 1
726: e4 e8 ldi r30, 0x84 ; 132
728: fd e5 ldi r31, 0x5D ; 93
72a: 02 c0 rjmp .+4 ; 0x730 <.do_copy_data_start>
 
0000072c <.do_copy_data_loop>:
72c: 05 90 lpm r0, Z+
72e: 0d 92 st X+, r0
 
00000730 <.do_copy_data_start>:
730: ac 38 cpi r26, 0x8C ; 140
732: b1 07 cpc r27, r17
734: d9 f7 brne .-10 ; 0x72c <.do_copy_data_loop>
 
00000736 <__do_clear_bss>:
736: 15 e0 ldi r17, 0x05 ; 5
738: ac e8 ldi r26, 0x8C ; 140
73a: b1 e0 ldi r27, 0x01 ; 1
73c: 01 c0 rjmp .+2 ; 0x740 <.do_clear_bss_start>
 
0000073e <.do_clear_bss_loop>:
73e: 1d 92 st X+, r1
 
00000740 <.do_clear_bss_start>:
740: ac 32 cpi r26, 0x2C ; 44
742: b1 07 cpc r27, r17
744: e1 f7 brne .-8 ; 0x73e <.do_clear_bss_loop>
746: 0e 94 df 03 call 0x7be ; 0x7be <main>
74a: 0c 94 c1 2e jmp 0x5d82 ; 0x5d82 <_exit>
 
0000074e <__bad_interrupt>:
74e: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
 
00000752 <GetActiveParamSetNumber>:
752: a2 e0 ldi r26, 0x02 ; 2
754: b0 e0 ldi r27, 0x00 ; 0
756: 0e 94 a3 2e call 0x5d46 ; 0x5d46 <__eeprom_read_byte_1F2021>
75a: 80 2d mov r24, r0
75c: 99 27 eor r25, r25
75e: 08 95 ret
 
00000760 <WriteParameterSet>:
760: fb 01 movw r30, r22
762: 86 30 cpi r24, 0x06 ; 6
764: 08 f0 brcs .+2 ; 0x768 <WriteParameterSet+0x8>
766: 85 e0 ldi r24, 0x05 ; 5
768: 28 2f mov r18, r24
76a: 21 50 subi r18, 0x01 ; 1
76c: 84 2f mov r24, r20
76e: 99 27 eor r25, r25
770: aa e3 ldi r26, 0x3A ; 58
772: 2a 9f mul r18, r26
774: d0 01 movw r26, r0
776: 11 24 eor r1, r1
778: a6 5f subi r26, 0xF6 ; 246
77a: bf 4f sbci r27, 0xFF ; 255
 
0000077c <.28_start>:
77c: 01 97 sbiw r24, 0x01 ; 1
77e: 24 f0 brlt .+8 ; 0x788 <.28_finished>
780: 01 90 ld r0, Z+
782: 0e 94 b0 2e call 0x5d60 ; 0x5d60 <__eeprom_write_byte_1F2021>
786: fa cf rjmp .-12 ; 0x77c <.28_start>
 
00000788 <.28_finished>:
788: a2 e0 ldi r26, 0x02 ; 2
78a: b0 e0 ldi r27, 0x00 ; 0
78c: 02 2e mov r0, r18
78e: 0e 94 b0 2e call 0x5d60 ; 0x5d60 <__eeprom_write_byte_1F2021>
792: 08 95 ret
 
00000794 <ReadParameterSet>:
794: fb 01 movw r30, r22
796: 28 2f mov r18, r24
798: 86 30 cpi r24, 0x06 ; 6
79a: 08 f0 brcs .+2 ; 0x79e <ReadParameterSet+0xa>
79c: 25 e0 ldi r18, 0x05 ; 5
79e: 84 2f mov r24, r20
7a0: 99 27 eor r25, r25
7a2: 21 50 subi r18, 0x01 ; 1
7a4: aa e3 ldi r26, 0x3A ; 58
7a6: 2a 9f mul r18, r26
7a8: d0 01 movw r26, r0
7aa: 11 24 eor r1, r1
7ac: a6 5f subi r26, 0xF6 ; 246
7ae: bf 4f sbci r27, 0xFF ; 255
 
000007b0 <.49_start>:
7b0: 01 97 sbiw r24, 0x01 ; 1
7b2: 24 f0 brlt .+8 ; 0x7bc <.49_finished>
7b4: 0e 94 a3 2e call 0x5d46 ; 0x5d46 <__eeprom_read_byte_1F2021>
7b8: 01 92 st Z+, r0
7ba: fa cf rjmp .-12 ; 0x7b0 <.49_start>
 
000007bc <.49_finished>:
7bc: 08 95 ret
 
000007be <main>:
7be: 0f 93 push r16
7c0: 1f 93 push r17
7c2: cf 93 push r28
7c4: df 93 push r29
7c6: 81 e0 ldi r24, 0x01 ; 1
7c8: 87 b9 out 0x07, r24 ; 7
7ca: 8f ef ldi r24, 0xFF ; 255
7cc: 88 b9 out 0x08, r24 ; 8
7ce: 8b e1 ldi r24, 0x1B ; 27
7d0: 84 b9 out 0x04, r24 ; 4
7d2: 28 9a sbi 0x05, 0 ; 5
7d4: 8e e3 ldi r24, 0x3E ; 62
7d6: 8a b9 out 0x0a, r24 ; 10
7d8: 57 9a sbi 0x0a, 7 ; 10
7da: 87 ef ldi r24, 0xF7 ; 247
7dc: 8b b9 out 0x0b, r24 ; 11
7de: 84 b7 in r24, 0x34 ; 52
7e0: 87 7f andi r24, 0xF7 ; 247
7e2: 84 bf out 0x34, r24 ; 52
7e4: 80 91 60 00 lds r24, 0x0060
7e8: 88 61 ori r24, 0x18 ; 24
7ea: 80 93 60 00 sts 0x0060, r24
7ee: 10 92 60 00 sts 0x0060, r1
7f2: 88 ee ldi r24, 0xE8 ; 232
7f4: 93 e0 ldi r25, 0x03 ; 3
7f6: 90 93 a7 01 sts 0x01A7, r25
7fa: 80 93 a6 01 sts 0x01A6, r24
7fe: 10 92 1e 02 sts 0x021E, r1
802: 10 92 1d 02 sts 0x021D, r1
806: 10 92 ad 04 sts 0x04AD, r1
80a: 10 92 ac 04 sts 0x04AC, r1
80e: 10 92 1c 02 sts 0x021C, r1
812: 10 92 1b 02 sts 0x021B, r1
816: 10 92 1a 02 sts 0x021A, r1
81a: 10 92 19 02 sts 0x0219, r1
81e: 28 98 cbi 0x05, 0 ; 5
820: 0e 94 95 0b call 0x172a ; 0x172a <Timer_Init>
824: 0e 94 9c 07 call 0xf38 ; 0xf38 <UART_Init>
828: 0e 94 cb 18 call 0x3196 ; 0x3196 <rc_sum_init>
82c: 0e 94 dd 0c call 0x19ba ; 0x19ba <ADC_Init>
830: 0e 94 31 18 call 0x3062 ; 0x3062 <i2c_init>
834: 0e 94 0d 17 call 0x2e1a ; 0x2e1a <init_MM3>
838: 78 94 sei
83a: 10 92 a8 03 sts 0x03A8, r1
83e: 8c e3 ldi r24, 0x3C ; 60
840: 80 93 a9 03 sts 0x03A9, r24
844: 84 e0 ldi r24, 0x04 ; 4
846: 80 93 aa 03 sts 0x03AA, r24
84a: 8c e3 ldi r24, 0x3C ; 60
84c: 90 e0 ldi r25, 0x00 ; 0
84e: 9f 93 push r25
850: 8f 93 push r24
852: 1f 92 push r1
854: 1f 92 push r1
856: 83 ea ldi r24, 0xA3 ; 163
858: 91 e0 ldi r25, 0x01 ; 1
85a: 9f 93 push r25
85c: 8f 93 push r24
85e: 1f 92 push r1
860: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
864: 82 e8 ldi r24, 0x82 ; 130
866: 91 e0 ldi r25, 0x01 ; 1
868: 9f 93 push r25
86a: 8f 93 push r24
86c: 1f 92 push r1
86e: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
872: 29 9a sbi 0x05, 1 ; 5
874: a1 e0 ldi r26, 0x01 ; 1
876: b0 e0 ldi r27, 0x00 ; 0
878: 0e 94 a3 2e call 0x5d46 ; 0x5d46 <__eeprom_read_byte_1F2021>
87c: 80 2d mov r24, r0
87e: 2d b7 in r18, 0x3d ; 61
880: 3e b7 in r19, 0x3e ; 62
882: 26 5f subi r18, 0xF6 ; 246
884: 3f 4f sbci r19, 0xFF ; 255
886: 2d bf out 0x3d, r18 ; 61
888: 8a 30 cpi r24, 0x0A ; 10
88a: b9 f1 breq .+110 ; 0x8fa <main+0x13c>
88c: 83 e5 ldi r24, 0x53 ; 83
88e: 91 e0 ldi r25, 0x01 ; 1
890: 9f 93 push r25
892: 8f 93 push r24
894: 1f 92 push r1
896: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
89a: 0e 94 34 20 call 0x4068 ; 0x4068 <DefaultKonstanten1>
89e: 4a e3 ldi r20, 0x3A ; 58
8a0: 64 ed ldi r22, 0xD4 ; 212
8a2: 74 e0 ldi r23, 0x04 ; 4
8a4: 80 e0 ldi r24, 0x00 ; 0
8a6: 0e 94 b0 03 call 0x760 ; 0x760 <WriteParameterSet>
8aa: 01 e0 ldi r16, 0x01 ; 1
8ac: 0f 90 pop r0
8ae: 0f 90 pop r0
8b0: 0f 90 pop r0
8b2: 02 30 cpi r16, 0x02 ; 2
8b4: 49 f4 brne .+18 ; 0x8c8 <main+0x10a>
8b6: 0e 94 c7 1f call 0x3f8e ; 0x3f8e <DefaultKonstanten2>
8ba: 4a e3 ldi r20, 0x3A ; 58
8bc: 64 ed ldi r22, 0xD4 ; 212
8be: 74 e0 ldi r23, 0x04 ; 4
8c0: 82 e0 ldi r24, 0x02 ; 2
8c2: 0e 94 b0 03 call 0x760 ; 0x760 <WriteParameterSet>
8c6: 03 e0 ldi r16, 0x03 ; 3
8c8: 4a e3 ldi r20, 0x3A ; 58
8ca: 64 ed ldi r22, 0xD4 ; 212
8cc: 74 e0 ldi r23, 0x04 ; 4
8ce: 80 2f mov r24, r16
8d0: 0e 94 b0 03 call 0x760 ; 0x760 <WriteParameterSet>
8d4: 0f 5f subi r16, 0xFF ; 255
8d6: 06 30 cpi r16, 0x06 ; 6
8d8: 60 f3 brcs .-40 ; 0x8b2 <main+0xf4>
8da: 81 e0 ldi r24, 0x01 ; 1
8dc: 22 e0 ldi r18, 0x02 ; 2
8de: 30 e0 ldi r19, 0x00 ; 0
8e0: d9 01 movw r26, r18
8e2: 08 2e mov r0, r24
8e4: 0e 94 b0 2e call 0x5d60 ; 0x5d60 <__eeprom_write_byte_1F2021>
8e8: 8a e0 ldi r24, 0x0A ; 10
8ea: 21 50 subi r18, 0x01 ; 1
8ec: 30 40 sbci r19, 0x00 ; 0
8ee: d9 01 movw r26, r18
8f0: 08 2e mov r0, r24
8f2: 0e 94 b0 2e call 0x5d60 ; 0x5d60 <__eeprom_write_byte_1F2021>
8f6: 0e 94 be 21 call 0x437c ; 0x437c <calib_acc>
8fa: 02 e0 ldi r16, 0x02 ; 2
8fc: 10 e0 ldi r17, 0x00 ; 0
8fe: d8 01 movw r26, r16
900: 0e 94 a3 2e call 0x5d46 ; 0x5d46 <__eeprom_read_byte_1F2021>
904: 80 2d mov r24, r0
906: 4a e3 ldi r20, 0x3A ; 58
908: 64 ed ldi r22, 0xD4 ; 212
90a: 74 e0 ldi r23, 0x04 ; 4
90c: 0e 94 ca 03 call 0x794 ; 0x794 <ReadParameterSet>
910: d8 01 movw r26, r16
912: 0e 94 a3 2e call 0x5d46 ; 0x5d46 <__eeprom_read_byte_1F2021>
916: 80 2d mov r24, r0
918: 99 27 eor r25, r25
91a: 9f 93 push r25
91c: 8f 93 push r24
91e: 88 e3 ldi r24, 0x38 ; 56
920: 91 e0 ldi r25, 0x01 ; 1
922: 9f 93 push r25
924: 8f 93 push r24
926: 1f 92 push r1
928: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
92c: 84 ef ldi r24, 0xF4 ; 244
92e: 91 e0 ldi r25, 0x01 ; 1
930: 0e 94 b2 0b call 0x1764 ; 0x1764 <SetDelay>
934: ec 01 movw r28, r24
936: 0f 90 pop r0
938: 0f 90 pop r0
93a: 0f 90 pop r0
93c: 0f 90 pop r0
93e: 0f 90 pop r0
940: ce 01 movw r24, r28
942: 0e 94 bb 0b call 0x1776 ; 0x1776 <CheckDelay>
946: 88 23 and r24, r24
948: d9 f3 breq .-10 ; 0x940 <main+0x182>
94a: e0 91 d6 04 lds r30, 0x04D6
94e: ff 27 eor r31, r31
950: ee 0f add r30, r30
952: ff 1f adc r31, r31
954: e8 55 subi r30, 0x58 ; 88
956: fb 4f sbci r31, 0xFB ; 251
958: 80 81 ld r24, Z
95a: 91 81 ldd r25, Z+1 ; 0x01
95c: 85 36 cpi r24, 0x65 ; 101
95e: 91 05 cpc r25, r1
960: c4 f0 brlt .+48 ; 0x992 <main+0x1d4>
962: e0 91 d7 04 lds r30, 0x04D7
966: ff 27 eor r31, r31
968: ee 0f add r30, r30
96a: ff 1f adc r31, r31
96c: e8 55 subi r30, 0x58 ; 88
96e: fb 4f sbci r31, 0xFB ; 251
970: 80 81 ld r24, Z
972: 91 81 ldd r25, Z+1 ; 0x01
974: 85 36 cpi r24, 0x65 ; 101
976: 91 05 cpc r25, r1
978: 64 f0 brlt .+24 ; 0x992 <main+0x1d4>
97a: 83 e2 ldi r24, 0x23 ; 35
97c: 91 e0 ldi r25, 0x01 ; 1
97e: 9f 93 push r25
980: 8f 93 push r24
982: 1f 92 push r1
984: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
988: 0e 94 47 16 call 0x2c8e ; 0x2c8e <calib_MM3>
98c: 0f 90 pop r0
98e: 0f 90 pop r0
990: 0f 90 pop r0
992: e0 91 d6 04 lds r30, 0x04D6
996: ff 27 eor r31, r31
998: ee 0f add r30, r30
99a: ff 1f adc r31, r31
99c: e8 55 subi r30, 0x58 ; 88
99e: fb 4f sbci r31, 0xFB ; 251
9a0: 80 81 ld r24, Z
9a2: 91 81 ldd r25, Z+1 ; 0x01
9a4: 85 36 cpi r24, 0x65 ; 101
9a6: 91 05 cpc r25, r1
9a8: c4 f0 brlt .+48 ; 0x9da <main+0x21c>
9aa: e0 91 d7 04 lds r30, 0x04D7
9ae: ff 27 eor r31, r31
9b0: ee 0f add r30, r30
9b2: ff 1f adc r31, r31
9b4: e8 55 subi r30, 0x58 ; 88
9b6: fb 4f sbci r31, 0xFB ; 251
9b8: 80 81 ld r24, Z
9ba: 91 81 ldd r25, Z+1 ; 0x01
9bc: 8c 59 subi r24, 0x9C ; 156
9be: 9f 4f sbci r25, 0xFF ; 255
9c0: 64 f4 brge .+24 ; 0x9da <main+0x21c>
9c2: 8a e0 ldi r24, 0x0A ; 10
9c4: 91 e0 ldi r25, 0x01 ; 1
9c6: 9f 93 push r25
9c8: 8f 93 push r24
9ca: 1f 92 push r1
9cc: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
9d0: 0e 94 be 21 call 0x437c ; 0x437c <calib_acc>
9d4: 0f 90 pop r0
9d6: 0f 90 pop r0
9d8: 0f 90 pop r0
9da: 80 91 dc 04 lds r24, 0x04DC
9de: 80 ff sbrs r24, 0
9e0: 20 c0 rjmp .+64 ; 0xa22 <main+0x264>
9e2: 8d ee ldi r24, 0xED ; 237
9e4: 90 e0 ldi r25, 0x00 ; 0
9e6: 9f 93 push r25
9e8: 8f 93 push r24
9ea: 1f 92 push r1
9ec: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
9f0: 84 ec ldi r24, 0xC4 ; 196
9f2: 99 e0 ldi r25, 0x09 ; 9
9f4: 0e 94 b2 0b call 0x1764 ; 0x1764 <SetDelay>
9f8: ec 01 movw r28, r24
9fa: 0e 94 f9 0f call 0x1ff2 ; 0x1ff2 <SucheLuftruckOffset>
9fe: 0f 90 pop r0
a00: 0f 90 pop r0
a02: 0f 90 pop r0
a04: ce 01 movw r24, r28
a06: 0e 94 bb 0b call 0x1776 ; 0x1776 <CheckDelay>
a0a: 88 23 and r24, r24
a0c: d9 f3 breq .-10 ; 0xa04 <main+0x246>
a0e: 88 ee ldi r24, 0xE8 ; 232
a10: 90 e0 ldi r25, 0x00 ; 0
a12: 9f 93 push r25
a14: 8f 93 push r24
a16: 1f 92 push r1
a18: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
a1c: 0f 90 pop r0
a1e: 0f 90 pop r0
a20: 0f 90 pop r0
a22: 0e 94 ec 20 call 0x41d8 ; 0x41d8 <SetNeutral>
a26: 28 98 cbi 0x05, 0 ; 5
a28: 80 ed ldi r24, 0xD0 ; 208
a2a: 97 e0 ldi r25, 0x07 ; 7
a2c: 90 93 a7 01 sts 0x01A7, r25
a30: 80 93 a6 01 sts 0x01A6, r24
a34: 88 ee ldi r24, 0xE8 ; 232
a36: 93 e0 ldi r25, 0x03 ; 3
a38: 90 93 a3 03 sts 0x03A3, r25
a3c: 80 93 a2 03 sts 0x03A2, r24
a40: 85 e5 ldi r24, 0x55 ; 85
a42: 80 93 9d 03 sts 0x039D, r24
a46: 8a ed ldi r24, 0xDA ; 218
a48: 90 e0 ldi r25, 0x00 ; 0
a4a: 9f 93 push r25
a4c: 8f 93 push r24
a4e: 1f 92 push r1
a50: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
a54: 80 91 dc 04 lds r24, 0x04DC
a58: 0f 90 pop r0
a5a: 0f 90 pop r0
a5c: 0f 90 pop r0
a5e: 82 ff sbrs r24, 2
a60: 03 c0 rjmp .+6 ; 0xa68 <main+0x2aa>
a62: 8e ec ldi r24, 0xCE ; 206
a64: 90 e0 ldi r25, 0x00 ; 0
a66: 02 c0 rjmp .+4 ; 0xa6c <main+0x2ae>
a68: 86 ec ldi r24, 0xC6 ; 198
a6a: 90 e0 ldi r25, 0x00 ; 0
a6c: 9f 93 push r25
a6e: 8f 93 push r24
a70: 1f 92 push r1
a72: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
a76: 0f 90 pop r0
a78: 0f 90 pop r0
a7a: 0f 90 pop r0
a7c: 82 ec ldi r24, 0xC2 ; 194
a7e: 90 e0 ldi r25, 0x00 ; 0
a80: 9f 93 push r25
a82: 8f 93 push r24
a84: 1f 92 push r1
a86: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
a8a: 0e 94 3d 10 call 0x207a ; 0x207a <LcdClear>
a8e: 0f 90 pop r0
a90: 0f 90 pop r0
a92: 0f 90 pop r0
a94: 80 91 a5 01 lds r24, 0x01A5
a98: 88 23 and r24, r24
a9a: 79 f1 breq .+94 ; 0xafa <main+0x33c>
a9c: 10 92 a5 01 sts 0x01A5, r1
aa0: 0e 94 37 22 call 0x446e ; 0x446e <MotorRegler>
aa4: 0e 94 a5 20 call 0x414a ; 0x414a <SendMotorData>
aa8: 28 98 cbi 0x05, 0 ; 5
aaa: 80 91 01 01 lds r24, 0x0101
aae: 88 23 and r24, r24
ab0: 19 f0 breq .+6 ; 0xab8 <main+0x2fa>
ab2: 81 50 subi r24, 0x01 ; 1
ab4: 80 93 01 01 sts 0x0101, r24
ab8: 80 91 18 02 lds r24, 0x0218
abc: 88 23 and r24, r24
abe: 29 f0 breq .+10 ; 0xaca <main+0x30c>
ac0: 80 91 18 02 lds r24, 0x0218
ac4: 81 50 subi r24, 0x01 ; 1
ac6: 80 93 18 02 sts 0x0218, r24
aca: 20 91 04 01 lds r18, 0x0104
ace: 30 91 05 01 lds r19, 0x0105
ad2: 80 91 ec 04 lds r24, 0x04EC
ad6: 99 27 eor r25, r25
ad8: 28 17 cp r18, r24
ada: 39 07 cpc r19, r25
adc: 34 f4 brge .+12 ; 0xaea <main+0x32c>
ade: 80 ed ldi r24, 0xD0 ; 208
ae0: 97 e0 ldi r25, 0x07 ; 7
ae2: 90 93 a7 01 sts 0x01A7, r25
ae6: 80 93 a6 01 sts 0x01A6, r24
aea: 80 91 d0 01 lds r24, 0x01D0
aee: 88 23 and r24, r24
af0: 19 f4 brne .+6 ; 0xaf8 <main+0x33a>
af2: 0e 94 31 18 call 0x3062 ; 0x3062 <i2c_init>
af6: 01 c0 rjmp .+2 ; 0xafa <main+0x33c>
af8: 28 98 cbi 0x05, 0 ; 5
afa: 0e 94 b7 07 call 0xf6e ; 0xf6e <DatenUebertragung>
afe: 0e 94 25 08 call 0x104a ; 0x104a <BearbeiteRxDaten>
b02: 80 e0 ldi r24, 0x00 ; 0
b04: 90 e0 ldi r25, 0x00 ; 0
b06: 0e 94 bb 0b call 0x1776 ; 0x1776 <CheckDelay>
b0a: 88 23 and r24, r24
b0c: 19 f2 breq .-122 ; 0xa94 <main+0x2d6>
b0e: 80 91 1f 02 lds r24, 0x021F
b12: 88 23 and r24, r24
b14: 29 f0 breq .+10 ; 0xb20 <main+0x362>
b16: 88 b1 in r24, 0x08 ; 8
b18: 90 e1 ldi r25, 0x10 ; 16
b1a: 89 27 eor r24, r25
b1c: 88 b9 out 0x08, r24 ; 8
b1e: 01 c0 rjmp .+2 ; 0xb22 <main+0x364>
b20: 44 98 cbi 0x08, 4 ; 8
b22: 84 ef ldi r24, 0xF4 ; 244
b24: 91 e0 ldi r25, 0x01 ; 1
b26: 0e 94 b2 0b call 0x1764 ; 0x1764 <SetDelay>
b2a: b4 cf rjmp .-152 ; 0xa94 <main+0x2d6>
 
00000b2c <__vector_22>:
b2c: 1f 92 push r1
b2e: 0f 92 push r0
b30: 0f b6 in r0, 0x3f ; 63
b32: 0f 92 push r0
b34: 11 24 eor r1, r1
b36: 8f 93 push r24
b38: 9f 93 push r25
b3a: ef 93 push r30
b3c: ff 93 push r31
b3e: 80 91 00 01 lds r24, 0x0100
b42: 88 23 and r24, r24
b44: e1 f4 brne .+56 ; 0xb7e <__vector_22+0x52>
b46: 80 91 a1 01 lds r24, 0x01A1
b4a: 90 91 a2 01 lds r25, 0x01A2
b4e: 01 96 adiw r24, 0x01 ; 1
b50: 90 93 a2 01 sts 0x01A2, r25
b54: 80 93 a1 01 sts 0x01A1, r24
b58: fc 01 movw r30, r24
b5a: e1 59 subi r30, 0x91 ; 145
b5c: fd 4f sbci r31, 0xFD ; 253
b5e: e0 81 ld r30, Z
b60: ed 30 cpi r30, 0x0D ; 13
b62: 19 f0 breq .+6 ; 0xb6a <__vector_22+0x3e>
b64: 86 39 cpi r24, 0x96 ; 150
b66: 91 05 cpc r25, r1
b68: 39 f4 brne .+14 ; 0xb78 <__vector_22+0x4c>
b6a: 10 92 a2 01 sts 0x01A2, r1
b6e: 10 92 a1 01 sts 0x01A1, r1
b72: 81 e0 ldi r24, 0x01 ; 1
b74: 80 93 00 01 sts 0x0100, r24
b78: e0 93 c6 00 sts 0x00C6, r30
b7c: 04 c0 rjmp .+8 ; 0xb86 <__vector_22+0x5a>
b7e: 10 92 a2 01 sts 0x01A2, r1
b82: 10 92 a1 01 sts 0x01A1, r1
b86: ff 91 pop r31
b88: ef 91 pop r30
b8a: 9f 91 pop r25
b8c: 8f 91 pop r24
b8e: 0f 90 pop r0
b90: 0f be out 0x3f, r0 ; 63
b92: 0f 90 pop r0
b94: 1f 90 pop r1
b96: 18 95 reti
 
00000b98 <__vector_20>:
b98: 1f 92 push r1
b9a: 0f 92 push r0
b9c: 0f b6 in r0, 0x3f ; 63
b9e: 0f 92 push r0
ba0: 11 24 eor r1, r1
ba2: 2f 93 push r18
ba4: 3f 93 push r19
ba6: 4f 93 push r20
ba8: 8f 93 push r24
baa: 9f 93 push r25
bac: af 93 push r26
bae: bf 93 push r27
bb0: cf 93 push r28
bb2: df 93 push r29
bb4: ef 93 push r30
bb6: ff 93 push r31
bb8: 80 91 c6 00 lds r24, 0x00C6
bbc: 80 93 90 01 sts 0x0190, r24
bc0: 40 91 9c 01 lds r20, 0x019C
bc4: 46 39 cpi r20, 0x96 ; 150
bc6: 10 f0 brcs .+4 ; 0xbcc <__vector_20+0x34>
bc8: 10 92 9b 01 sts 0x019B, r1
bcc: 80 91 90 01 lds r24, 0x0190
bd0: 8d 30 cpi r24, 0x0D ; 13
bd2: 09 f0 breq .+2 ; 0xbd6 <__vector_20+0x3e>
bd4: 5c c0 rjmp .+184 ; 0xc8e <__vector_20+0xf6>
bd6: 80 91 9b 01 lds r24, 0x019B
bda: 82 30 cpi r24, 0x02 ; 2
bdc: 09 f0 breq .+2 ; 0xbe0 <__vector_20+0x48>
bde: 57 c0 rjmp .+174 ; 0xc8e <__vector_20+0xf6>
be0: 10 92 9b 01 sts 0x019B, r1
be4: a4 2f mov r26, r20
be6: bb 27 eor r27, r27
be8: fd 01 movw r30, r26
bea: e0 55 subi r30, 0x50 ; 80
bec: fc 4f sbci r31, 0xFC ; 252
bee: 30 81 ld r19, Z
bf0: ed 01 movw r28, r26
bf2: cf 54 subi r28, 0x4F ; 79
bf4: dc 4f sbci r29, 0xFC ; 252
bf6: 28 81 ld r18, Y
bf8: 80 91 9f 01 lds r24, 0x019F
bfc: 90 91 a0 01 lds r25, 0x01A0
c00: 83 1b sub r24, r19
c02: 91 09 sbc r25, r1
c04: 82 1b sub r24, r18
c06: 91 09 sbc r25, r1
c08: 9f 70 andi r25, 0x0F ; 15
c0a: 90 93 a0 01 sts 0x01A0, r25
c0e: 80 93 9f 01 sts 0x019F, r24
c12: 9c 01 movw r18, r24
c14: 96 e0 ldi r25, 0x06 ; 6
c16: 36 95 lsr r19
c18: 27 95 ror r18
c1a: 9a 95 dec r25
c1c: e1 f7 brne .-8 ; 0xc16 <__vector_20+0x7e>
c1e: 23 5c subi r18, 0xC3 ; 195
c20: 20 93 9e 01 sts 0x019E, r18
c24: 98 2f mov r25, r24
c26: 9f 73 andi r25, 0x3F ; 63
c28: 93 5c subi r25, 0xC3 ; 195
c2a: 90 93 9d 01 sts 0x019D, r25
c2e: 80 81 ld r24, Z
c30: 28 17 cp r18, r24
c32: 29 f4 brne .+10 ; 0xc3e <__vector_20+0xa6>
c34: 88 81 ld r24, Y
c36: 98 17 cp r25, r24
c38: 11 f4 brne .+4 ; 0xc3e <__vector_20+0xa6>
c3a: 91 e0 ldi r25, 0x01 ; 1
c3c: 06 c0 rjmp .+12 ; 0xc4a <__vector_20+0xb2>
c3e: 80 91 93 01 lds r24, 0x0193
c42: 8f 5f subi r24, 0xFF ; 255
c44: 80 93 93 01 sts 0x0193, r24
c48: 90 e0 ldi r25, 0x00 ; 0
c4a: 80 91 91 01 lds r24, 0x0191
c4e: 88 23 and r24, r24
c50: 09 f0 breq .+2 ; 0xc54 <__vector_20+0xbc>
c52: 64 c0 rjmp .+200 ; 0xd1c <__vector_20+0x184>
c54: 99 23 and r25, r25
c56: 09 f4 brne .+2 ; 0xc5a <__vector_20+0xc2>
c58: 61 c0 rjmp .+194 ; 0xd1c <__vector_20+0x184>
c5a: 81 e0 ldi r24, 0x01 ; 1
c5c: 80 93 91 01 sts 0x0191, r24
c60: 40 93 94 01 sts 0x0194, r20
c64: ae 54 subi r26, 0x4E ; 78
c66: bc 4f sbci r27, 0xFC ; 252
c68: 8d e0 ldi r24, 0x0D ; 13
c6a: 8c 93 st X, r24
c6c: 80 91 b4 03 lds r24, 0x03B4
c70: 82 35 cpi r24, 0x52 ; 82
c72: 09 f0 breq .+2 ; 0xc76 <__vector_20+0xde>
c74: 53 c0 rjmp .+166 ; 0xd1c <__vector_20+0x184>
c76: 88 e1 ldi r24, 0x18 ; 24
c78: 90 e0 ldi r25, 0x00 ; 0
c7a: 2c e0 ldi r18, 0x0C ; 12
c7c: 0f b6 in r0, 0x3f ; 63
c7e: f8 94 cli
c80: a8 95 wdr
c82: 80 93 60 00 sts 0x0060, r24
c86: 0f be out 0x3f, r0 ; 63
c88: 20 93 60 00 sts 0x0060, r18
c8c: 47 c0 rjmp .+142 ; 0xd1c <__vector_20+0x184>
c8e: 80 91 9b 01 lds r24, 0x019B
c92: 81 30 cpi r24, 0x01 ; 1
c94: d9 f0 breq .+54 ; 0xccc <__vector_20+0x134>
c96: 81 30 cpi r24, 0x01 ; 1
c98: 18 f0 brcs .+6 ; 0xca0 <__vector_20+0x108>
c9a: 82 30 cpi r24, 0x02 ; 2
c9c: e9 f5 brne .+122 ; 0xd18 <__vector_20+0x180>
c9e: 30 c0 rjmp .+96 ; 0xd00 <__vector_20+0x168>
ca0: 80 91 90 01 lds r24, 0x0190
ca4: 83 32 cpi r24, 0x23 ; 35
ca6: 39 f4 brne .+14 ; 0xcb6 <__vector_20+0x11e>
ca8: 80 91 91 01 lds r24, 0x0191
cac: 88 23 and r24, r24
cae: 19 f4 brne .+6 ; 0xcb6 <__vector_20+0x11e>
cb0: 81 e0 ldi r24, 0x01 ; 1
cb2: 80 93 9b 01 sts 0x019B, r24
cb6: 80 91 90 01 lds r24, 0x0190
cba: 80 93 b2 03 sts 0x03B2, r24
cbe: 81 e0 ldi r24, 0x01 ; 1
cc0: 80 93 9c 01 sts 0x019C, r24
cc4: 80 91 90 01 lds r24, 0x0190
cc8: 99 27 eor r25, r25
cca: 15 c0 rjmp .+42 ; 0xcf6 <__vector_20+0x15e>
ccc: 82 e0 ldi r24, 0x02 ; 2
cce: 80 93 9b 01 sts 0x019B, r24
cd2: e4 2f mov r30, r20
cd4: ff 27 eor r31, r31
cd6: 80 91 90 01 lds r24, 0x0190
cda: ee 54 subi r30, 0x4E ; 78
cdc: fc 4f sbci r31, 0xFC ; 252
cde: 80 83 st Z, r24
ce0: 4f 5f subi r20, 0xFF ; 255
ce2: 40 93 9c 01 sts 0x019C, r20
ce6: 20 91 90 01 lds r18, 0x0190
cea: 80 91 9f 01 lds r24, 0x019F
cee: 90 91 a0 01 lds r25, 0x01A0
cf2: 82 0f add r24, r18
cf4: 91 1d adc r25, r1
cf6: 90 93 a0 01 sts 0x01A0, r25
cfa: 80 93 9f 01 sts 0x019F, r24
cfe: 0e c0 rjmp .+28 ; 0xd1c <__vector_20+0x184>
d00: e4 2f mov r30, r20
d02: ff 27 eor r31, r31
d04: 80 91 90 01 lds r24, 0x0190
d08: ee 54 subi r30, 0x4E ; 78
d0a: fc 4f sbci r31, 0xFC ; 252
d0c: 80 83 st Z, r24
d0e: 46 39 cpi r20, 0x96 ; 150
d10: 38 f3 brcs .-50 ; 0xce0 <__vector_20+0x148>
d12: 10 92 9b 01 sts 0x019B, r1
d16: e7 cf rjmp .-50 ; 0xce6 <__vector_20+0x14e>
d18: 10 92 9b 01 sts 0x019B, r1
d1c: ff 91 pop r31
d1e: ef 91 pop r30
d20: df 91 pop r29
d22: cf 91 pop r28
d24: bf 91 pop r27
d26: af 91 pop r26
d28: 9f 91 pop r25
d2a: 8f 91 pop r24
d2c: 4f 91 pop r20
d2e: 3f 91 pop r19
d30: 2f 91 pop r18
d32: 0f 90 pop r0
d34: 0f be out 0x3f, r0 ; 63
d36: 0f 90 pop r0
d38: 1f 90 pop r1
d3a: 18 95 reti
 
00000d3c <AddCRC>:
d3c: dc 01 movw r26, r24
d3e: 20 e0 ldi r18, 0x00 ; 0
d40: 30 e0 ldi r19, 0x00 ; 0
d42: 40 e0 ldi r20, 0x00 ; 0
d44: 50 e0 ldi r21, 0x00 ; 0
d46: ef e6 ldi r30, 0x6F ; 111
d48: f2 e0 ldi r31, 0x02 ; 2
d4a: 05 c0 rjmp .+10 ; 0xd56 <AddCRC+0x1a>
d4c: 81 91 ld r24, Z+
d4e: 28 0f add r18, r24
d50: 31 1d adc r19, r1
d52: 4f 5f subi r20, 0xFF ; 255
d54: 5f 4f sbci r21, 0xFF ; 255
d56: 4a 17 cp r20, r26
d58: 5b 07 cpc r21, r27
d5a: c1 f7 brne .-16 ; 0xd4c <AddCRC+0x10>
d5c: 3f 70 andi r19, 0x0F ; 15
d5e: c9 01 movw r24, r18
d60: 36 e0 ldi r19, 0x06 ; 6
d62: 96 95 lsr r25
d64: 87 95 ror r24
d66: 3a 95 dec r19
d68: e1 f7 brne .-8 ; 0xd62 <AddCRC+0x26>
d6a: 83 5c subi r24, 0xC3 ; 195
d6c: fd 01 movw r30, r26
d6e: e1 59 subi r30, 0x91 ; 145
d70: fd 4f sbci r31, 0xFD ; 253
d72: 80 83 st Z, r24
d74: 11 96 adiw r26, 0x01 ; 1
d76: 2f 73 andi r18, 0x3F ; 63
d78: 23 5c subi r18, 0xC3 ; 195
d7a: fd 01 movw r30, r26
d7c: e1 59 subi r30, 0x91 ; 145
d7e: fd 4f sbci r31, 0xFD ; 253
d80: 20 83 st Z, r18
d82: a0 59 subi r26, 0x90 ; 144
d84: bd 4f sbci r27, 0xFD ; 253
d86: 8d e0 ldi r24, 0x0D ; 13
d88: 8c 93 st X, r24
d8a: 10 92 00 01 sts 0x0100, r1
d8e: 80 91 6f 02 lds r24, 0x026F
d92: 80 93 c6 00 sts 0x00C6, r24
d96: 08 95 ret
 
00000d98 <SendOutData>:
d98: ef 92 push r14
d9a: ff 92 push r15
d9c: 0f 93 push r16
d9e: 1f 93 push r17
da0: cf 93 push r28
da2: df 93 push r29
da4: 7a 01 movw r14, r20
da6: 72 2f mov r23, r18
da8: 93 e2 ldi r25, 0x23 ; 35
daa: 90 93 6f 02 sts 0x026F, r25
dae: 60 93 70 02 sts 0x0270, r22
db2: 80 93 71 02 sts 0x0271, r24
db6: 03 e0 ldi r16, 0x03 ; 3
db8: 10 e0 ldi r17, 0x00 ; 0
dba: 60 e0 ldi r22, 0x00 ; 0
dbc: a2 e7 ldi r26, 0x72 ; 114
dbe: b2 e0 ldi r27, 0x02 ; 2
dc0: 46 c0 rjmp .+140 ; 0xe4e <SendOutData+0xb6>
dc2: f7 01 movw r30, r14
dc4: e6 0f add r30, r22
dc6: f1 1d adc r31, r1
dc8: 90 81 ld r25, Z
dca: 6f 5f subi r22, 0xFF ; 255
dcc: 71 50 subi r23, 0x01 ; 1
dce: 19 f4 brne .+6 ; 0xdd6 <SendOutData+0x3e>
dd0: e0 e0 ldi r30, 0x00 ; 0
dd2: 40 e0 ldi r20, 0x00 ; 0
dd4: 0f c0 rjmp .+30 ; 0xdf4 <SendOutData+0x5c>
dd6: f7 01 movw r30, r14
dd8: e6 0f add r30, r22
dda: f1 1d adc r31, r1
ddc: 40 81 ld r20, Z
dde: 6f 5f subi r22, 0xFF ; 255
de0: 71 50 subi r23, 0x01 ; 1
de2: 11 f4 brne .+4 ; 0xde8 <SendOutData+0x50>
de4: e0 e0 ldi r30, 0x00 ; 0
de6: 06 c0 rjmp .+12 ; 0xdf4 <SendOutData+0x5c>
de8: f7 01 movw r30, r14
dea: e6 0f add r30, r22
dec: f1 1d adc r31, r1
dee: e0 81 ld r30, Z
df0: 6f 5f subi r22, 0xFF ; 255
df2: 71 50 subi r23, 0x01 ; 1
df4: 89 2f mov r24, r25
df6: 86 95 lsr r24
df8: 86 95 lsr r24
dfa: 83 5c subi r24, 0xC3 ; 195
dfc: 8c 93 st X, r24
dfe: 55 27 eor r21, r21
e00: 89 2f mov r24, r25
e02: 99 27 eor r25, r25
e04: 83 70 andi r24, 0x03 ; 3
e06: 90 70 andi r25, 0x00 ; 0
e08: 24 e0 ldi r18, 0x04 ; 4
e0a: 88 0f add r24, r24
e0c: 99 1f adc r25, r25
e0e: 2a 95 dec r18
e10: e1 f7 brne .-8 ; 0xe0a <SendOutData+0x72>
e12: 9a 01 movw r18, r20
e14: 94 e0 ldi r25, 0x04 ; 4
e16: 36 95 lsr r19
e18: 27 95 ror r18
e1a: 9a 95 dec r25
e1c: e1 f7 brne .-8 ; 0xe16 <SendOutData+0x7e>
e1e: 82 2b or r24, r18
e20: 83 5c subi r24, 0xC3 ; 195
e22: ed 01 movw r28, r26
e24: 89 83 std Y+1, r24 ; 0x01
e26: 4f 70 andi r20, 0x0F ; 15
e28: 50 70 andi r21, 0x00 ; 0
e2a: 44 0f add r20, r20
e2c: 55 1f adc r21, r21
e2e: 44 0f add r20, r20
e30: 55 1f adc r21, r21
e32: 8e 2f mov r24, r30
e34: 82 95 swap r24
e36: 86 95 lsr r24
e38: 86 95 lsr r24
e3a: 83 70 andi r24, 0x03 ; 3
e3c: 84 2b or r24, r20
e3e: 83 5c subi r24, 0xC3 ; 195
e40: 8a 83 std Y+2, r24 ; 0x02
e42: ef 73 andi r30, 0x3F ; 63
e44: e3 5c subi r30, 0xC3 ; 195
e46: eb 83 std Y+3, r30 ; 0x03
e48: 0c 5f subi r16, 0xFC ; 252
e4a: 1f 4f sbci r17, 0xFF ; 255
e4c: 14 96 adiw r26, 0x04 ; 4
e4e: 77 23 and r23, r23
e50: 09 f0 breq .+2 ; 0xe54 <SendOutData+0xbc>
e52: b7 cf rjmp .-146 ; 0xdc2 <SendOutData+0x2a>
e54: c8 01 movw r24, r16
e56: 0e 94 9e 06 call 0xd3c ; 0xd3c <AddCRC>
e5a: e6 e0 ldi r30, 0x06 ; 6
e5c: cd b7 in r28, 0x3d ; 61
e5e: de b7 in r29, 0x3e ; 62
e60: 0c 94 8e 2e jmp 0x5d1c ; 0x5d1c <__epilogue_restores__+0x18>
 
00000e64 <Decode64>:
e64: 1f 93 push r17
e66: cf 93 push r28
e68: df 93 push r29
e6a: ec 01 movw r28, r24
e6c: 70 e0 ldi r23, 0x00 ; 0
e6e: a2 2f mov r26, r18
e70: bb 27 eor r27, r27
e72: 12 97 sbiw r26, 0x02 ; 2
e74: 48 c0 rjmp .+144 ; 0xf06 <Decode64+0xa2>
e76: e4 2f mov r30, r20
e78: ff 27 eor r31, r31
e7a: ee 54 subi r30, 0x4E ; 78
e7c: fc 4f sbci r31, 0xFC ; 252
e7e: 30 81 ld r19, Z
e80: 4f 5f subi r20, 0xFF ; 255
e82: e4 2f mov r30, r20
e84: ff 27 eor r31, r31
e86: ee 54 subi r30, 0x4E ; 78
e88: fc 4f sbci r31, 0xFC ; 252
e8a: 50 81 ld r21, Z
e8c: 4f 5f subi r20, 0xFF ; 255
e8e: e4 2f mov r30, r20
e90: ff 27 eor r31, r31
e92: ee 54 subi r30, 0x4E ; 78
e94: fc 4f sbci r31, 0xFC ; 252
e96: 10 81 ld r17, Z
e98: 4f 5f subi r20, 0xFF ; 255
e9a: e4 2f mov r30, r20
e9c: ff 27 eor r31, r31
e9e: ee 54 subi r30, 0x4E ; 78
ea0: fc 4f sbci r31, 0xFC ; 252
ea2: 20 81 ld r18, Z
ea4: 4f 5f subi r20, 0xFF ; 255
ea6: 84 2f mov r24, r20
ea8: 99 27 eor r25, r25
eaa: a8 17 cp r26, r24
eac: b9 07 cpc r27, r25
eae: 74 f1 brlt .+92 ; 0xf0c <Decode64+0xa8>
eb0: 5d 53 subi r21, 0x3D ; 61
eb2: fe 01 movw r30, r28
eb4: e7 0f add r30, r23
eb6: f1 1d adc r31, r1
eb8: 3d 53 subi r19, 0x3D ; 61
eba: 33 0f add r19, r19
ebc: 33 0f add r19, r19
ebe: 85 2f mov r24, r21
ec0: 82 95 swap r24
ec2: 8f 70 andi r24, 0x0F ; 15
ec4: 38 2b or r19, r24
ec6: 30 83 st Z, r19
ec8: 61 30 cpi r22, 0x01 ; 1
eca: 01 f1 breq .+64 ; 0xf0c <Decode64+0xa8>
ecc: 91 2f mov r25, r17
ece: 9d 53 subi r25, 0x3D ; 61
ed0: 7f 5f subi r23, 0xFF ; 255
ed2: fe 01 movw r30, r28
ed4: e7 0f add r30, r23
ed6: f1 1d adc r31, r1
ed8: 71 50 subi r23, 0x01 ; 1
eda: 52 95 swap r21
edc: 50 7f andi r21, 0xF0 ; 240
ede: 89 2f mov r24, r25
ee0: 86 95 lsr r24
ee2: 86 95 lsr r24
ee4: 58 2b or r21, r24
ee6: 50 83 st Z, r21
ee8: 63 50 subi r22, 0x03 ; 3
eea: 6f 3f cpi r22, 0xFF ; 255
eec: 79 f0 breq .+30 ; 0xf0c <Decode64+0xa8>
eee: 7e 5f subi r23, 0xFE ; 254
ef0: fe 01 movw r30, r28
ef2: e7 0f add r30, r23
ef4: f1 1d adc r31, r1
ef6: 92 95 swap r25
ef8: 99 0f add r25, r25
efa: 99 0f add r25, r25
efc: 90 7c andi r25, 0xC0 ; 192
efe: 2d 53 subi r18, 0x3D ; 61
f00: 92 2b or r25, r18
f02: 90 83 st Z, r25
f04: 7f 5f subi r23, 0xFF ; 255
f06: 66 23 and r22, r22
f08: 09 f0 breq .+2 ; 0xf0c <Decode64+0xa8>
f0a: b5 cf rjmp .-150 ; 0xe76 <Decode64+0x12>
f0c: df 91 pop r29
f0e: cf 91 pop r28
f10: 1f 91 pop r17
f12: 08 95 ret
 
00000f14 <uart_putchar>:
f14: 1f 93 push r17
f16: 18 2f mov r17, r24
f18: 8a 30 cpi r24, 0x0A ; 10
f1a: 19 f4 brne .+6 ; 0xf22 <uart_putchar+0xe>
f1c: 8d e0 ldi r24, 0x0D ; 13
f1e: 0e 94 8a 07 call 0xf14 ; 0xf14 <uart_putchar>
f22: 80 91 c0 00 lds r24, 0x00C0
f26: 85 ff sbrs r24, 5
f28: fc cf rjmp .-8 ; 0xf22 <uart_putchar+0xe>
f2a: 10 93 c6 00 sts 0x00C6, r17
f2e: 80 e0 ldi r24, 0x00 ; 0
f30: 90 e0 ldi r25, 0x00 ; 0
f32: 1f 91 pop r17
f34: 08 95 ret
 
00000f36 <WriteProgramData>:
f36: 08 95 ret
 
00000f38 <UART_Init>:
f38: e1 ec ldi r30, 0xC1 ; 193
f3a: f0 e0 ldi r31, 0x00 ; 0
f3c: 88 e1 ldi r24, 0x18 ; 24
f3e: 80 83 st Z, r24
f40: a0 ec ldi r26, 0xC0 ; 192
f42: b0 e0 ldi r27, 0x00 ; 0
f44: 8c 91 ld r24, X
f46: 82 60 ori r24, 0x02 ; 2
f48: 8c 93 st X, r24
f4a: 80 81 ld r24, Z
f4c: 80 68 ori r24, 0x80 ; 128
f4e: 80 83 st Z, r24
f50: 80 81 ld r24, Z
f52: 80 64 ori r24, 0x40 ; 64
f54: 80 83 st Z, r24
f56: 8a e2 ldi r24, 0x2A ; 42
f58: 80 93 c4 00 sts 0x00C4, r24
f5c: 88 ec ldi r24, 0xC8 ; 200
f5e: 90 e0 ldi r25, 0x00 ; 0
f60: 0e 94 b2 0b call 0x1764 ; 0x1764 <SetDelay>
f64: 90 93 9c 03 sts 0x039C, r25
f68: 80 93 9b 03 sts 0x039B, r24
f6c: 08 95 ret
 
00000f6e <DatenUebertragung>:
f6e: 80 91 00 01 lds r24, 0x0100
f72: 88 23 and r24, r24
f74: 09 f4 brne .+2 ; 0xf78 <DatenUebertragung+0xa>
f76: 68 c0 rjmp .+208 ; 0x1048 <DatenUebertragung+0xda>
f78: 80 91 8c 01 lds r24, 0x018C
f7c: 88 23 and r24, r24
f7e: 71 f0 breq .+28 ; 0xf9c <DatenUebertragung+0x2e>
f80: 80 91 00 01 lds r24, 0x0100
f84: 88 23 and r24, r24
f86: 51 f0 breq .+20 ; 0xf9c <DatenUebertragung+0x2e>
f88: 2b e0 ldi r18, 0x0B ; 11
f8a: 4d e9 ldi r20, 0x9D ; 157
f8c: 53 e0 ldi r21, 0x03 ; 3
f8e: 60 91 6e 02 lds r22, 0x026E
f92: 87 e4 ldi r24, 0x47 ; 71
f94: 0e 94 cc 06 call 0xd98 ; 0xd98 <SendOutData>
f98: 10 92 8c 01 sts 0x018C, r1
f9c: 80 91 9b 03 lds r24, 0x039B
fa0: 90 91 9c 03 lds r25, 0x039C
fa4: 0e 94 bb 0b call 0x1776 ; 0x1776 <CheckDelay>
fa8: 88 23 and r24, r24
faa: 21 f4 brne .+8 ; 0xfb4 <DatenUebertragung+0x46>
fac: 80 91 8e 01 lds r24, 0x018E
fb0: 88 23 and r24, r24
fb2: b1 f0 breq .+44 ; 0xfe0 <DatenUebertragung+0x72>
fb4: 80 91 00 01 lds r24, 0x0100
fb8: 88 23 and r24, r24
fba: 91 f0 breq .+36 ; 0xfe0 <DatenUebertragung+0x72>
fbc: 22 e3 ldi r18, 0x32 ; 50
fbe: 48 e4 ldi r20, 0x48 ; 72
fc0: 54 e0 ldi r21, 0x04 ; 4
fc2: 60 91 6e 02 lds r22, 0x026E
fc6: 84 e4 ldi r24, 0x44 ; 68
fc8: 0e 94 cc 06 call 0xd98 ; 0xd98 <SendOutData>
fcc: 10 92 8e 01 sts 0x018E, r1
fd0: 8a ef ldi r24, 0xFA ; 250
fd2: 90 e0 ldi r25, 0x00 ; 0
fd4: 0e 94 b2 0b call 0x1764 ; 0x1764 <SetDelay>
fd8: 90 93 9c 03 sts 0x039C, r25
fdc: 80 93 9b 03 sts 0x039B, r24
fe0: 80 91 8d 01 lds r24, 0x018D
fe4: 88 23 and r24, r24
fe6: f1 f0 breq .+60 ; 0x1024 <DatenUebertragung+0xb6>
fe8: 80 91 00 01 lds r24, 0x0100
fec: 88 23 and r24, r24
fee: d1 f0 breq .+52 ; 0x1024 <DatenUebertragung+0xb6>
ff0: 0e 94 46 10 call 0x208c ; 0x208c <Menu>
ff4: 10 92 8d 01 sts 0x018D, r1
ff8: 80 91 9a 01 lds r24, 0x019A
ffc: 8f 5f subi r24, 0xFF ; 255
ffe: 80 93 9a 01 sts 0x019A, r24
1002: 84 30 cpi r24, 0x04 ; 4
1004: 11 f4 brne .+4 ; 0x100a <DatenUebertragung+0x9c>
1006: 10 92 9a 01 sts 0x019A, r1
100a: 80 91 9a 01 lds r24, 0x019A
100e: 44 e1 ldi r20, 0x14 ; 20
1010: 84 9f mul r24, r20
1012: a0 01 movw r20, r0
1014: 11 24 eor r1, r1
1016: 4a 5e subi r20, 0xEA ; 234
1018: 5e 4f sbci r21, 0xFE ; 254
101a: 24 e1 ldi r18, 0x14 ; 20
101c: 60 e0 ldi r22, 0x00 ; 0
101e: 80 5d subi r24, 0xD0 ; 208
1020: 0e 94 cc 06 call 0xd98 ; 0xd98 <SendOutData>
1024: 80 91 8f 01 lds r24, 0x018F
1028: 88 23 and r24, r24
102a: 71 f0 breq .+28 ; 0x1048 <DatenUebertragung+0xda>
102c: 80 91 00 01 lds r24, 0x0100
1030: 88 23 and r24, r24
1032: 51 f0 breq .+20 ; 0x1048 <DatenUebertragung+0xda>
1034: 2a e0 ldi r18, 0x0A ; 10
1036: 48 ea ldi r20, 0xA8 ; 168
1038: 53 e0 ldi r21, 0x03 ; 3
103a: 60 91 6e 02 lds r22, 0x026E
103e: 86 e5 ldi r24, 0x56 ; 86
1040: 0e 94 cc 06 call 0xd98 ; 0xd98 <SendOutData>
1044: 10 92 8f 01 sts 0x018F, r1
1048: 08 95 ret
 
0000104a <BearbeiteRxDaten>:
104a: a2 e0 ldi r26, 0x02 ; 2
104c: b0 e0 ldi r27, 0x00 ; 0
104e: eb e2 ldi r30, 0x2B ; 43
1050: f8 e0 ldi r31, 0x08 ; 8
1052: 0c 94 75 2e jmp 0x5cea ; 0x5cea <__prologue_saves__+0x1e>
1056: 80 91 91 01 lds r24, 0x0191
105a: 88 23 and r24, r24
105c: 09 f4 brne .+2 ; 0x1060 <BearbeiteRxDaten+0x16>
105e: 8f c0 rjmp .+286 ; 0x117e <__stack+0x7f>
1060: 8f ef ldi r24, 0xFF ; 255
1062: 80 93 01 01 sts 0x0101, r24
1066: 80 91 b4 03 lds r24, 0x03B4
106a: 99 27 eor r25, r25
106c: aa 27 eor r26, r26
106e: bb 27 eor r27, r27
1070: fc 01 movw r30, r24
1072: e3 56 subi r30, 0x63 ; 99
1074: f0 40 sbci r31, 0x00 ; 0
1076: e4 31 cpi r30, 0x14 ; 20
1078: f1 05 cpc r31, r1
107a: 08 f0 brcs .+2 ; 0x107e <BearbeiteRxDaten+0x34>
107c: 7e c0 rjmp .+252 ; 0x117a <__stack+0x7b>
107e: e8 5c subi r30, 0xC8 ; 200
1080: ff 4f sbci r31, 0xFF ; 255
1082: 0c 94 9d 2e jmp 0x5d3a ; 0x5d3a <__tablejump2__>
1086: 20 91 94 01 lds r18, 0x0194
108a: 43 e0 ldi r20, 0x03 ; 3
108c: 6b e0 ldi r22, 0x0B ; 11
108e: 8d e9 ldi r24, 0x9D ; 157
1090: 93 e0 ldi r25, 0x03 ; 3
1092: 0e 94 32 07 call 0xe64 ; 0xe64 <Decode64>
1096: 80 91 c6 01 lds r24, 0x01C6
109a: 90 91 9f 03 lds r25, 0x039F
109e: 89 2b or r24, r25
10a0: 80 93 c6 01 sts 0x01C6, r24
10a4: 81 e0 ldi r24, 0x01 ; 1
10a6: 80 93 8e 01 sts 0x018E, r24
10aa: 67 c0 rjmp .+206 ; 0x117a <__stack+0x7b>
10ac: 20 91 94 01 lds r18, 0x0194
10b0: 43 e0 ldi r20, 0x03 ; 3
10b2: 62 e0 ldi r22, 0x02 ; 2
10b4: ce 01 movw r24, r28
10b6: 01 96 adiw r24, 0x01 ; 1
10b8: 0e 94 32 07 call 0xe64 ; 0xe64 <Decode64>
10bc: 80 91 c6 01 lds r24, 0x01C6
10c0: 99 81 ldd r25, Y+1 ; 0x01
10c2: 89 2b or r24, r25
10c4: 80 93 c6 01 sts 0x01C6, r24
10c8: 81 e0 ldi r24, 0x01 ; 1
10ca: 80 93 8d 01 sts 0x018D, r24
10ce: 55 c0 rjmp .+170 ; 0x117a <__stack+0x7b>
10d0: 20 91 94 01 lds r18, 0x0194
10d4: 43 e0 ldi r20, 0x03 ; 3
10d6: 64 e0 ldi r22, 0x04 ; 4
10d8: 86 e9 ldi r24, 0x96 ; 150
10da: 91 e0 ldi r25, 0x01 ; 1
10dc: 0e 94 32 07 call 0xe64 ; 0xe64 <Decode64>
10e0: 4c c0 rjmp .+152 ; 0x117a <__stack+0x7b>
10e2: 81 e0 ldi r24, 0x01 ; 1
10e4: 80 93 8f 01 sts 0x018F, r24
10e8: 48 c0 rjmp .+144 ; 0x117a <__stack+0x7b>
10ea: 81 e0 ldi r24, 0x01 ; 1
10ec: 80 93 8c 01 sts 0x018C, r24
10f0: 44 c0 rjmp .+136 ; 0x117a <__stack+0x7b>
10f2: 20 91 94 01 lds r18, 0x0194
10f6: 43 e0 ldi r20, 0x03 ; 3
10f8: 62 e0 ldi r22, 0x02 ; 2
10fa: ce 01 movw r24, r28
10fc: 01 96 adiw r24, 0x01 ; 1
10fe: 0e 94 32 07 call 0xe64 ; 0xe64 <Decode64>
1102: 89 81 ldd r24, Y+1 ; 0x01
1104: 8f 3f cpi r24, 0xFF ; 255
1106: 89 f0 breq .+34 ; 0x112a <__stack+0x2b>
1108: 86 30 cpi r24, 0x06 ; 6
110a: 10 f0 brcs .+4 ; 0x1110 <__stack+0x11>
110c: 85 e0 ldi r24, 0x05 ; 5
110e: 89 83 std Y+1, r24 ; 0x01
1110: 4a e3 ldi r20, 0x3A ; 58
1112: 64 ed ldi r22, 0xD4 ; 212
1114: 74 e0 ldi r23, 0x04 ; 4
1116: 89 81 ldd r24, Y+1 ; 0x01
1118: 0e 94 ca 03 call 0x794 ; 0x794 <ReadParameterSet>
111c: 89 81 ldd r24, Y+1 ; 0x01
111e: 2a e3 ldi r18, 0x3A ; 58
1120: 44 ed ldi r20, 0xD4 ; 212
1122: 54 e0 ldi r21, 0x04 ; 4
1124: 60 91 6e 02 lds r22, 0x026E
1128: 08 c0 rjmp .+16 ; 0x113a <__stack+0x3b>
112a: 10 91 6e 02 lds r17, 0x026E
112e: 0e 94 a9 03 call 0x752 ; 0x752 <GetActiveParamSetNumber>
1132: 2a e3 ldi r18, 0x3A ; 58
1134: 44 ed ldi r20, 0xD4 ; 212
1136: 54 e0 ldi r21, 0x04 ; 4
1138: 61 2f mov r22, r17
113a: 85 5b subi r24, 0xB5 ; 181
113c: 0e 94 cc 06 call 0xd98 ; 0xd98 <SendOutData>
1140: 1c c0 rjmp .+56 ; 0x117a <__stack+0x7b>
1142: 20 91 94 01 lds r18, 0x0194
1146: 43 e0 ldi r20, 0x03 ; 3
1148: 6a e3 ldi r22, 0x3A ; 58
114a: 84 ed ldi r24, 0xD4 ; 212
114c: 94 e0 ldi r25, 0x04 ; 4
114e: 0e 94 32 07 call 0xe64 ; 0xe64 <Decode64>
1152: 80 91 b4 03 lds r24, 0x03B4
1156: 4a e3 ldi r20, 0x3A ; 58
1158: 64 ed ldi r22, 0xD4 ; 212
115a: 74 e0 ldi r23, 0x04 ; 4
115c: 8b 56 subi r24, 0x6B ; 107
115e: 0e 94 b0 03 call 0x760 ; 0x760 <WriteParameterSet>
1162: 80 91 b4 03 lds r24, 0x03B4
1166: 8b 56 subi r24, 0x6B ; 107
1168: a2 e0 ldi r26, 0x02 ; 2
116a: b0 e0 ldi r27, 0x00 ; 0
116c: 08 2e mov r0, r24
116e: 0e 94 b0 2e call 0x5d60 ; 0x5d60 <__eeprom_write_byte_1F2021>
1172: 0e 94 a9 03 call 0x752 ; 0x752 <GetActiveParamSetNumber>
1176: 0e 94 22 22 call 0x4444 ; 0x4444 <Piep>
117a: 10 92 91 01 sts 0x0191, r1
117e: e3 e0 ldi r30, 0x03 ; 3
1180: ce 5f subi r28, 0xFE ; 254
1182: 0c 94 91 2e jmp 0x5d22 ; 0x5d22 <__epilogue_restores__+0x1e>
 
00001186 <Putchar>:
1186: 98 2f mov r25, r24
1188: 80 91 7a 04 lds r24, 0x047A
118c: 81 30 cpi r24, 0x01 ; 1
118e: 69 f4 brne .+26 ; 0x11aa <Putchar+0x24>
1190: 80 91 c5 01 lds r24, 0x01C5
1194: e8 2f mov r30, r24
1196: ff 27 eor r31, r31
1198: ea 5e subi r30, 0xEA ; 234
119a: fe 4f sbci r31, 0xFE ; 254
119c: 90 83 st Z, r25
119e: 8f 5f subi r24, 0xFF ; 255
11a0: 80 93 c5 01 sts 0x01C5, r24
11a4: 21 e0 ldi r18, 0x01 ; 1
11a6: 30 e0 ldi r19, 0x00 ; 0
11a8: 05 c0 rjmp .+10 ; 0x11b4 <Putchar+0x2e>
11aa: 89 2f mov r24, r25
11ac: 0e 94 8a 07 call 0xf14 ; 0xf14 <uart_putchar>
11b0: 28 2f mov r18, r24
11b2: 33 27 eor r19, r19
11b4: c9 01 movw r24, r18
11b6: 08 95 ret
 
000011b8 <PAD_0>:
11b8: 1f 93 push r17
11ba: 18 2f mov r17, r24
11bc: 04 c0 rjmp .+8 ; 0x11c6 <PAD_0+0xe>
11be: 80 e3 ldi r24, 0x30 ; 48
11c0: 0e 94 c3 08 call 0x1186 ; 0x1186 <Putchar>
11c4: 11 50 subi r17, 0x01 ; 1
11c6: 11 16 cp r1, r17
11c8: d4 f3 brlt .-12 ; 0x11be <PAD_0+0x6>
11ca: 1f 91 pop r17
11cc: 08 95 ret
 
000011ce <PAD_SP>:
11ce: 1f 93 push r17
11d0: 18 2f mov r17, r24
11d2: 04 c0 rjmp .+8 ; 0x11dc <PAD_SP+0xe>
11d4: 80 e2 ldi r24, 0x20 ; 32
11d6: 0e 94 c3 08 call 0x1186 ; 0x1186 <Putchar>
11da: 11 50 subi r17, 0x01 ; 1
11dc: 11 16 cp r1, r17
11de: d4 f3 brlt .-12 ; 0x11d4 <PAD_SP+0x6>
11e0: 1f 91 pop r17
11e2: 08 95 ret
 
000011e4 <PRINTP>:
11e4: 0f 93 push r16
11e6: 1f 93 push r17
11e8: cf 93 push r28
11ea: df 93 push r29
11ec: 8c 01 movw r16, r24
11ee: eb 01 movw r28, r22
11f0: 08 c0 rjmp .+16 ; 0x1202 <PRINTP+0x1e>
11f2: f8 01 movw r30, r16
11f4: 0f 5f subi r16, 0xFF ; 255
11f6: 1f 4f sbci r17, 0xFF ; 255
11f8: e4 91 lpm r30, Z
11fa: 8e 2f mov r24, r30
11fc: 0e 94 c3 08 call 0x1186 ; 0x1186 <Putchar>
1200: 21 97 sbiw r28, 0x01 ; 1
1202: 20 97 sbiw r28, 0x00 ; 0
1204: b1 f7 brne .-20 ; 0x11f2 <PRINTP+0xe>
1206: df 91 pop r29
1208: cf 91 pop r28
120a: 1f 91 pop r17
120c: 0f 91 pop r16
120e: 08 95 ret
 
00001210 <PRINT>:
1210: 0f 93 push r16
1212: 1f 93 push r17
1214: cf 93 push r28
1216: df 93 push r29
1218: 8c 01 movw r16, r24
121a: eb 01 movw r28, r22
121c: 06 c0 rjmp .+12 ; 0x122a <PRINT+0x1a>
121e: f8 01 movw r30, r16
1220: 81 91 ld r24, Z+
1222: 8f 01 movw r16, r30
1224: 0e 94 c3 08 call 0x1186 ; 0x1186 <Putchar>
1228: 21 97 sbiw r28, 0x01 ; 1
122a: 20 97 sbiw r28, 0x00 ; 0
122c: c1 f7 brne .-16 ; 0x121e <PRINT+0xe>
122e: df 91 pop r29
1230: cf 91 pop r28
1232: 1f 91 pop r17
1234: 0f 91 pop r16
1236: 08 95 ret
 
00001238 <_printf_P>:
1238: a3 e3 ldi r26, 0x33 ; 51
123a: b0 e0 ldi r27, 0x00 ; 0
123c: e2 e2 ldi r30, 0x22 ; 34
123e: f9 e0 ldi r31, 0x09 ; 9
1240: 0c 94 66 2e jmp 0x5ccc ; 0x5ccc <__prologue_saves__>
1244: 29 96 adiw r28, 0x09 ; 9
1246: 8f ad ldd r24, Y+63 ; 0x3f
1248: 29 97 sbiw r28, 0x09 ; 9
124a: 80 93 7a 04 sts 0x047A, r24
124e: ce 01 movw r24, r28
1250: 85 5b subi r24, 0xB5 ; 181
1252: 9f 4f sbci r25, 0xFF ; 255
1254: 9d 83 std Y+5, r25 ; 0x05
1256: 8c 83 std Y+4, r24 ; 0x04
1258: 2b 96 adiw r28, 0x0b ; 11
125a: 8e ad ldd r24, Y+62 ; 0x3e
125c: 9f ad ldd r25, Y+63 ; 0x3f
125e: 2b 97 sbiw r28, 0x0b ; 11
1260: 9f a7 std Y+47, r25 ; 0x2f
1262: 8e a7 std Y+46, r24 ; 0x2e
1264: 22 24 eor r2, r2
1266: 33 24 eor r3, r3
1268: 21 01 movw r4, r2
126a: 02 c0 rjmp .+4 ; 0x1270 <_printf_P+0x38>
126c: 13 01 movw r2, r6
126e: 24 01 movw r4, r8
1270: 0e a5 ldd r16, Y+46 ; 0x2e
1272: 1f a5 ldd r17, Y+47 ; 0x2f
1274: 02 c0 rjmp .+4 ; 0x127a <_printf_P+0x42>
1276: 0f 5f subi r16, 0xFF ; 255
1278: 1f 4f sbci r17, 0xFF ; 255
127a: f8 01 movw r30, r16
127c: f4 90 lpm r15, Z
127e: ff 20 and r15, r15
1280: 19 f0 breq .+6 ; 0x1288 <_printf_P+0x50>
1282: f5 e2 ldi r31, 0x25 ; 37
1284: ff 16 cp r15, r31
1286: b9 f7 brne .-18 ; 0x1276 <_printf_P+0x3e>
1288: b8 01 movw r22, r16
128a: 8e a5 ldd r24, Y+46 ; 0x2e
128c: 9f a5 ldd r25, Y+47 ; 0x2f
128e: 68 1b sub r22, r24
1290: 79 0b sbc r23, r25
1292: 11 f0 breq .+4 ; 0x1298 <_printf_P+0x60>
1294: 0e 94 f2 08 call 0x11e4 ; 0x11e4 <PRINTP>
1298: ff 20 and r15, r15
129a: 09 f4 brne .+2 ; 0x129e <_printf_P+0x66>
129c: 42 c2 rjmp .+1156 ; 0x1722 <_printf_P+0x4ea>
129e: 0f 5f subi r16, 0xFF ; 255
12a0: 1f 4f sbci r17, 0xFF ; 255
12a2: 1f a7 std Y+47, r17 ; 0x2f
12a4: 0e a7 std Y+46, r16 ; 0x2e
12a6: 19 82 std Y+1, r1 ; 0x01
12a8: ac 81 ldd r26, Y+4 ; 0x04
12aa: bd 81 ldd r27, Y+5 ; 0x05
12ac: 1b aa std Y+51, r1 ; 0x33
12ae: 1a aa std Y+50, r1 ; 0x32
12b0: 9f ef ldi r25, 0xFF ; 255
12b2: 99 ab std Y+49, r25 ; 0x31
12b4: ee a5 ldd r30, Y+46 ; 0x2e
12b6: ff a5 ldd r31, Y+47 ; 0x2f
12b8: cf 01 movw r24, r30
12ba: 01 96 adiw r24, 0x01 ; 1
12bc: 9f a7 std Y+47, r25 ; 0x2f
12be: 8e a7 std Y+46, r24 ; 0x2e
12c0: b4 90 lpm r11, Z
12c2: 95 e7 ldi r25, 0x75 ; 117
12c4: b9 16 cp r11, r25
12c6: 21 f0 breq .+8 ; 0x12d0 <_printf_P+0x98>
12c8: 8b 2d mov r24, r11
12ca: 80 62 ori r24, 0x20 ; 32
12cc: 88 37 cpi r24, 0x78 ; 120
12ce: 89 f4 brne .+34 ; 0x12f2 <_printf_P+0xba>
12d0: eb a9 ldd r30, Y+51 ; 0x33
12d2: e0 ff sbrs r30, 0
12d4: 07 c0 rjmp .+14 ; 0x12e4 <_printf_P+0xac>
12d6: 2d 90 ld r2, X+
12d8: 3d 90 ld r3, X+
12da: 4d 90 ld r4, X+
12dc: 5c 90 ld r5, X
12de: 13 97 sbiw r26, 0x03 ; 3
12e0: 14 96 adiw r26, 0x04 ; 4
12e2: 07 c0 rjmp .+14 ; 0x12f2 <_printf_P+0xba>
12e4: 8d 91 ld r24, X+
12e6: 9c 91 ld r25, X
12e8: 11 97 sbiw r26, 0x01 ; 1
12ea: 1c 01 movw r2, r24
12ec: 44 24 eor r4, r4
12ee: 55 24 eor r5, r5
12f0: 12 96 adiw r26, 0x02 ; 2
12f2: f0 e2 ldi r31, 0x20 ; 32
12f4: bf 16 cp r11, r31
12f6: 21 f4 brne .+8 ; 0x1300 <_printf_P+0xc8>
12f8: 89 81 ldd r24, Y+1 ; 0x01
12fa: 88 23 and r24, r24
12fc: d9 f6 brne .-74 ; 0x12b4 <_printf_P+0x7c>
12fe: 85 c0 rjmp .+266 ; 0x140a <_printf_P+0x1d2>
1300: 83 e2 ldi r24, 0x23 ; 35
1302: b8 16 cp r11, r24
1304: 09 f4 brne .+2 ; 0x1308 <_printf_P+0xd0>
1306: 83 c0 rjmp .+262 ; 0x140e <_printf_P+0x1d6>
1308: 9a e2 ldi r25, 0x2A ; 42
130a: b9 16 cp r11, r25
130c: 21 f0 breq .+8 ; 0x1316 <_printf_P+0xde>
130e: ed e2 ldi r30, 0x2D ; 45
1310: be 16 cp r11, r30
1312: 69 f4 brne .+26 ; 0x132e <_printf_P+0xf6>
1314: 08 c0 rjmp .+16 ; 0x1326 <_printf_P+0xee>
1316: fd 01 movw r30, r26
1318: 12 96 adiw r26, 0x02 ; 2
131a: e0 81 ld r30, Z
131c: ea ab std Y+50, r30 ; 0x32
131e: e7 ff sbrs r30, 7
1320: c9 cf rjmp .-110 ; 0x12b4 <_printf_P+0x7c>
1322: e1 95 neg r30
1324: ea ab std Y+50, r30 ; 0x32
1326: fb a9 ldd r31, Y+51 ; 0x33
1328: f0 61 ori r31, 0x10 ; 16
132a: ff 7d andi r31, 0xDF ; 223
132c: 72 c0 rjmp .+228 ; 0x1412 <_printf_P+0x1da>
132e: 8b e2 ldi r24, 0x2B ; 43
1330: b8 16 cp r11, r24
1332: 09 f4 brne .+2 ; 0x1336 <_printf_P+0xfe>
1334: 6a c0 rjmp .+212 ; 0x140a <_printf_P+0x1d2>
1336: 9e e2 ldi r25, 0x2E ; 46
1338: b9 16 cp r11, r25
133a: b1 f5 brne .+108 ; 0x13a8 <_printf_P+0x170>
133c: 2e a5 ldd r18, Y+46 ; 0x2e
133e: 3f a5 ldd r19, Y+47 ; 0x2f
1340: 2f 5f subi r18, 0xFF ; 255
1342: 3f 4f sbci r19, 0xFF ; 255
1344: ee a5 ldd r30, Y+46 ; 0x2e
1346: ff a5 ldd r31, Y+47 ; 0x2f
1348: 84 91 lpm r24, Z
134a: 8a 32 cpi r24, 0x2A ; 42
134c: 21 f0 breq .+8 ; 0x1356 <_printf_P+0x11e>
134e: b8 2e mov r11, r24
1350: 20 e0 ldi r18, 0x00 ; 0
1352: 30 e0 ldi r19, 0x00 ; 0
1354: 1b c0 rjmp .+54 ; 0x138c <_printf_P+0x154>
1356: fd 01 movw r30, r26
1358: 12 96 adiw r26, 0x02 ; 2
135a: 40 81 ld r20, Z
135c: 51 81 ldd r21, Z+1 ; 0x01
135e: 57 ff sbrs r21, 7
1360: 02 c0 rjmp .+4 ; 0x1366 <_printf_P+0x12e>
1362: 4f ef ldi r20, 0xFF ; 255
1364: 5f ef ldi r21, 0xFF ; 255
1366: 49 ab std Y+49, r20 ; 0x31
1368: 3f a7 std Y+47, r19 ; 0x2f
136a: 2e a7 std Y+46, r18 ; 0x2e
136c: a3 cf rjmp .-186 ; 0x12b4 <_printf_P+0x7c>
136e: c9 01 movw r24, r18
1370: 03 e0 ldi r16, 0x03 ; 3
1372: 88 0f add r24, r24
1374: 99 1f adc r25, r25
1376: 0a 95 dec r16
1378: e1 f7 brne .-8 ; 0x1372 <_printf_P+0x13a>
137a: 22 0f add r18, r18
137c: 33 1f adc r19, r19
137e: 28 0f add r18, r24
1380: 39 1f adc r19, r25
1382: 2b 0d add r18, r11
1384: 31 1d adc r19, r1
1386: 20 53 subi r18, 0x30 ; 48
1388: 30 40 sbci r19, 0x00 ; 0
138a: b4 90 lpm r11, Z
138c: 31 96 adiw r30, 0x01 ; 1
138e: 8b 2d mov r24, r11
1390: 80 53 subi r24, 0x30 ; 48
1392: 8a 30 cpi r24, 0x0A ; 10
1394: 60 f3 brcs .-40 ; 0x136e <_printf_P+0x136>
1396: ff a7 std Y+47, r31 ; 0x2f
1398: ee a7 std Y+46, r30 ; 0x2e
139a: a9 01 movw r20, r18
139c: 37 ff sbrs r19, 7
139e: 02 c0 rjmp .+4 ; 0x13a4 <_printf_P+0x16c>
13a0: 4f ef ldi r20, 0xFF ; 255
13a2: 5f ef ldi r21, 0xFF ; 255
13a4: 49 ab std Y+49, r20 ; 0x31
13a6: 8d cf rjmp .-230 ; 0x12c2 <_printf_P+0x8a>
13a8: f0 e3 ldi r31, 0x30 ; 48
13aa: bf 16 cp r11, r31
13ac: 31 f4 brne .+12 ; 0x13ba <_printf_P+0x182>
13ae: 8b a9 ldd r24, Y+51 ; 0x33
13b0: 84 fd sbrc r24, 4
13b2: 80 cf rjmp .-256 ; 0x12b4 <_printf_P+0x7c>
13b4: 80 62 ori r24, 0x20 ; 32
13b6: 8b ab std Y+51, r24 ; 0x33
13b8: 7d cf rjmp .-262 ; 0x12b4 <_printf_P+0x7c>
13ba: 8b 2d mov r24, r11
13bc: 81 53 subi r24, 0x31 ; 49
13be: 89 30 cpi r24, 0x09 ; 9
13c0: e8 f4 brcc .+58 ; 0x13fc <_printf_P+0x1c4>
13c2: 20 e0 ldi r18, 0x00 ; 0
13c4: 30 e0 ldi r19, 0x00 ; 0
13c6: c9 01 movw r24, r18
13c8: f3 e0 ldi r31, 0x03 ; 3
13ca: 88 0f add r24, r24
13cc: 99 1f adc r25, r25
13ce: fa 95 dec r31
13d0: e1 f7 brne .-8 ; 0x13ca <_printf_P+0x192>
13d2: 22 0f add r18, r18
13d4: 33 1f adc r19, r19
13d6: 28 0f add r18, r24
13d8: 39 1f adc r19, r25
13da: 2b 0d add r18, r11
13dc: 31 1d adc r19, r1
13de: 20 53 subi r18, 0x30 ; 48
13e0: 30 40 sbci r19, 0x00 ; 0
13e2: ee a5 ldd r30, Y+46 ; 0x2e
13e4: ff a5 ldd r31, Y+47 ; 0x2f
13e6: cf 01 movw r24, r30
13e8: 01 96 adiw r24, 0x01 ; 1
13ea: 9f a7 std Y+47, r25 ; 0x2f
13ec: 8e a7 std Y+46, r24 ; 0x2e
13ee: b4 90 lpm r11, Z
13f0: 8b 2d mov r24, r11
13f2: 80 53 subi r24, 0x30 ; 48
13f4: 8a 30 cpi r24, 0x0A ; 10
13f6: 38 f3 brcs .-50 ; 0x13c6 <_printf_P+0x18e>
13f8: 2a ab std Y+50, r18 ; 0x32
13fa: 63 cf rjmp .-314 ; 0x12c2 <_printf_P+0x8a>
13fc: 98 e6 ldi r25, 0x68 ; 104
13fe: b9 16 cp r11, r25
1400: 51 f4 brne .+20 ; 0x1416 <_printf_P+0x1de>
1402: eb a9 ldd r30, Y+51 ; 0x33
1404: e4 60 ori r30, 0x04 ; 4
1406: eb ab std Y+51, r30 ; 0x33
1408: 55 cf rjmp .-342 ; 0x12b4 <_printf_P+0x7c>
140a: b9 82 std Y+1, r11 ; 0x01
140c: 53 cf rjmp .-346 ; 0x12b4 <_printf_P+0x7c>
140e: fb a9 ldd r31, Y+51 ; 0x33
1410: f8 60 ori r31, 0x08 ; 8
1412: fb ab std Y+51, r31 ; 0x33
1414: 4f cf rjmp .-354 ; 0x12b4 <_printf_P+0x7c>
1416: 8c e6 ldi r24, 0x6C ; 108
1418: b8 16 cp r11, r24
141a: 21 f4 brne .+8 ; 0x1424 <_printf_P+0x1ec>
141c: 9b a9 ldd r25, Y+51 ; 0x33
141e: 91 60 ori r25, 0x01 ; 1
1420: 9b ab std Y+51, r25 ; 0x33
1422: 48 cf rjmp .-368 ; 0x12b4 <_printf_P+0x7c>
1424: bd 83 std Y+5, r27 ; 0x05
1426: ac 83 std Y+4, r26 ; 0x04
1428: e3 e6 ldi r30, 0x63 ; 99
142a: be 16 cp r11, r30
142c: 39 f4 brne .+14 ; 0x143c <_printf_P+0x204>
142e: 12 96 adiw r26, 0x02 ; 2
1430: bd 83 std Y+5, r27 ; 0x05
1432: ac 83 std Y+4, r26 ; 0x04
1434: 12 97 sbiw r26, 0x02 ; 2
1436: 8c 91 ld r24, X
1438: 8e 83 std Y+6, r24 ; 0x06
143a: 18 c1 rjmp .+560 ; 0x166c <_printf_P+0x434>
143c: f4 e4 ldi r31, 0x44 ; 68
143e: bf 16 cp r11, r31
1440: 39 f0 breq .+14 ; 0x1450 <_printf_P+0x218>
1442: 84 e6 ldi r24, 0x64 ; 100
1444: b8 16 cp r11, r24
1446: 39 f0 breq .+14 ; 0x1456 <_printf_P+0x21e>
1448: 99 e6 ldi r25, 0x69 ; 105
144a: b9 16 cp r11, r25
144c: 59 f5 brne .+86 ; 0x14a4 <_printf_P+0x26c>
144e: 03 c0 rjmp .+6 ; 0x1456 <_printf_P+0x21e>
1450: eb a9 ldd r30, Y+51 ; 0x33
1452: e1 60 ori r30, 0x01 ; 1
1454: eb ab std Y+51, r30 ; 0x33
1456: fb a9 ldd r31, Y+51 ; 0x33
1458: f0 ff sbrs r31, 0
145a: 08 c0 rjmp .+16 ; 0x146c <_printf_P+0x234>
145c: 14 96 adiw r26, 0x04 ; 4
145e: bd 83 std Y+5, r27 ; 0x05
1460: ac 83 std Y+4, r26 ; 0x04
1462: 5e 90 ld r5, -X
1464: 4e 90 ld r4, -X
1466: 3e 90 ld r3, -X
1468: 2e 90 ld r2, -X
146a: 0a c0 rjmp .+20 ; 0x1480 <_printf_P+0x248>
146c: 12 96 adiw r26, 0x02 ; 2
146e: bd 83 std Y+5, r27 ; 0x05
1470: ac 83 std Y+4, r26 ; 0x04
1472: 9e 91 ld r25, -X
1474: 8e 91 ld r24, -X
1476: 1c 01 movw r2, r24
1478: 44 24 eor r4, r4
147a: 37 fc sbrc r3, 7
147c: 40 94 com r4
147e: 54 2c mov r5, r4
1480: 57 fc sbrc r5, 7
1482: 03 c0 rjmp .+6 ; 0x148a <_printf_P+0x252>
1484: 8a e0 ldi r24, 0x0A ; 10
1486: 88 ab std Y+48, r24 ; 0x30
1488: 92 c0 rjmp .+292 ; 0x15ae <_printf_P+0x376>
148a: 50 94 com r5
148c: 40 94 com r4
148e: 30 94 com r3
1490: 20 94 com r2
1492: 21 1c adc r2, r1
1494: 31 1c adc r3, r1
1496: 41 1c adc r4, r1
1498: 51 1c adc r5, r1
149a: 8d e2 ldi r24, 0x2D ; 45
149c: 89 83 std Y+1, r24 ; 0x01
149e: 9a e0 ldi r25, 0x0A ; 10
14a0: 98 ab std Y+48, r25 ; 0x30
14a2: 85 c0 rjmp .+266 ; 0x15ae <_printf_P+0x376>
14a4: ef e4 ldi r30, 0x4F ; 79
14a6: be 16 cp r11, r30
14a8: 29 f0 breq .+10 ; 0x14b4 <_printf_P+0x27c>
14aa: ff e6 ldi r31, 0x6F ; 111
14ac: bf 16 cp r11, r31
14ae: 39 f4 brne .+14 ; 0x14be <_printf_P+0x286>
14b0: 88 e0 ldi r24, 0x08 ; 8
14b2: 61 c0 rjmp .+194 ; 0x1576 <_printf_P+0x33e>
14b4: 9b a9 ldd r25, Y+51 ; 0x33
14b6: 91 60 ori r25, 0x01 ; 1
14b8: 9b ab std Y+51, r25 ; 0x33
14ba: e8 e0 ldi r30, 0x08 ; 8
14bc: 56 c0 rjmp .+172 ; 0x156a <_printf_P+0x332>
14be: f0 e7 ldi r31, 0x70 ; 112
14c0: bf 16 cp r11, r31
14c2: 71 f4 brne .+28 ; 0x14e0 <_printf_P+0x2a8>
14c4: 12 96 adiw r26, 0x02 ; 2
14c6: bd 83 std Y+5, r27 ; 0x05
14c8: ac 83 std Y+4, r26 ; 0x04
14ca: 9e 91 ld r25, -X
14cc: 8e 91 ld r24, -X
14ce: 1c 01 movw r2, r24
14d0: 44 24 eor r4, r4
14d2: 55 24 eor r5, r5
14d4: 8b a9 ldd r24, Y+51 ; 0x33
14d6: 80 64 ori r24, 0x40 ; 64
14d8: 8b ab std Y+51, r24 ; 0x33
14da: 78 e7 ldi r23, 0x78 ; 120
14dc: b7 2e mov r11, r23
14de: 5e c0 rjmp .+188 ; 0x159c <_printf_P+0x364>
14e0: e3 e7 ldi r30, 0x73 ; 115
14e2: be 16 cp r11, r30
14e4: d9 f5 brne .+118 ; 0x155c <_printf_P+0x324>
14e6: 12 96 adiw r26, 0x02 ; 2
14e8: bd 83 std Y+5, r27 ; 0x05
14ea: ac 83 std Y+4, r26 ; 0x04
14ec: de 90 ld r13, -X
14ee: ce 90 ld r12, -X
14f0: c1 14 cp r12, r1
14f2: d1 04 cpc r13, r1
14f4: 89 f4 brne .+34 ; 0x1518 <_printf_P+0x2e0>
14f6: 88 e2 ldi r24, 0x28 ; 40
14f8: 8e 83 std Y+6, r24 ; 0x06
14fa: 8e e6 ldi r24, 0x6E ; 110
14fc: 8f 83 std Y+7, r24 ; 0x07
14fe: 85 e7 ldi r24, 0x75 ; 117
1500: 88 87 std Y+8, r24 ; 0x08
1502: 8c e6 ldi r24, 0x6C ; 108
1504: 89 87 std Y+9, r24 ; 0x09
1506: 8a 87 std Y+10, r24 ; 0x0a
1508: 89 e2 ldi r24, 0x29 ; 41
150a: 8b 87 std Y+11, r24 ; 0x0b
150c: 1c 86 std Y+12, r1 ; 0x0c
150e: 66 e0 ldi r22, 0x06 ; 6
1510: c6 2e mov r12, r22
1512: d1 2c mov r13, r1
1514: cc 0e add r12, r28
1516: dd 1e adc r13, r29
1518: f9 a9 ldd r31, Y+49 ; 0x31
151a: f7 fd sbrc r31, 7
151c: 13 c0 rjmp .+38 ; 0x1544 <_printf_P+0x30c>
151e: 4f 2f mov r20, r31
1520: 55 27 eor r21, r21
1522: 47 fd sbrc r20, 7
1524: 50 95 com r21
1526: 60 e0 ldi r22, 0x00 ; 0
1528: 70 e0 ldi r23, 0x00 ; 0
152a: c6 01 movw r24, r12
152c: 0e 94 6e 2c call 0x58dc ; 0x58dc <memchr>
1530: 00 97 sbiw r24, 0x00 ; 0
1532: 11 f4 brne .+4 ; 0x1538 <_printf_P+0x300>
1534: 19 a9 ldd r17, Y+49 ; 0x31
1536: 0d c0 rjmp .+26 ; 0x1552 <_printf_P+0x31a>
1538: 8c 19 sub r24, r12
153a: 19 a9 ldd r17, Y+49 ; 0x31
153c: 81 17 cp r24, r17
153e: 4c f4 brge .+18 ; 0x1552 <_printf_P+0x31a>
1540: 18 2f mov r17, r24
1542: 07 c0 rjmp .+14 ; 0x1552 <_printf_P+0x31a>
1544: f6 01 movw r30, r12
1546: 01 90 ld r0, Z+
1548: 00 20 and r0, r0
154a: e9 f7 brne .-6 ; 0x1546 <_printf_P+0x30e>
154c: 31 97 sbiw r30, 0x01 ; 1
154e: 1e 2f mov r17, r30
1550: 1c 19 sub r17, r12
1552: 19 82 std Y+1, r1 ; 0x01
1554: 42 01 movw r8, r4
1556: 31 01 movw r6, r2
1558: 40 e0 ldi r20, 0x00 ; 0
155a: 94 c0 rjmp .+296 ; 0x1684 <_printf_P+0x44c>
155c: 85 e5 ldi r24, 0x55 ; 85
155e: b8 16 cp r11, r24
1560: 31 f0 breq .+12 ; 0x156e <_printf_P+0x336>
1562: 95 e7 ldi r25, 0x75 ; 117
1564: b9 16 cp r11, r25
1566: 49 f4 brne .+18 ; 0x157a <_printf_P+0x342>
1568: ea e0 ldi r30, 0x0A ; 10
156a: e8 ab std Y+48, r30 ; 0x30
156c: 1f c0 rjmp .+62 ; 0x15ac <_printf_P+0x374>
156e: fb a9 ldd r31, Y+51 ; 0x33
1570: f1 60 ori r31, 0x01 ; 1
1572: fb ab std Y+51, r31 ; 0x33
1574: 8a e0 ldi r24, 0x0A ; 10
1576: 88 ab std Y+48, r24 ; 0x30
1578: 19 c0 rjmp .+50 ; 0x15ac <_printf_P+0x374>
157a: 98 e5 ldi r25, 0x58 ; 88
157c: b9 16 cp r11, r25
157e: 21 f0 breq .+8 ; 0x1588 <_printf_P+0x350>
1580: e8 e7 ldi r30, 0x78 ; 120
1582: be 16 cp r11, r30
1584: 09 f0 breq .+2 ; 0x1588 <_printf_P+0x350>
1586: 6e c0 rjmp .+220 ; 0x1664 <_printf_P+0x42c>
1588: fb a9 ldd r31, Y+51 ; 0x33
158a: f3 fd sbrc r31, 3
158c: 02 c0 rjmp .+4 ; 0x1592 <_printf_P+0x35a>
158e: 80 e1 ldi r24, 0x10 ; 16
1590: f2 cf rjmp .-28 ; 0x1576 <_printf_P+0x33e>
1592: 21 14 cp r2, r1
1594: 31 04 cpc r3, r1
1596: 41 04 cpc r4, r1
1598: 51 04 cpc r5, r1
159a: 19 f4 brne .+6 ; 0x15a2 <_printf_P+0x36a>
159c: 90 e1 ldi r25, 0x10 ; 16
159e: 98 ab std Y+48, r25 ; 0x30
15a0: 05 c0 rjmp .+10 ; 0x15ac <_printf_P+0x374>
15a2: eb a9 ldd r30, Y+51 ; 0x33
15a4: e0 64 ori r30, 0x40 ; 64
15a6: eb ab std Y+51, r30 ; 0x33
15a8: f0 e1 ldi r31, 0x10 ; 16
15aa: f8 ab std Y+48, r31 ; 0x30
15ac: 19 82 std Y+1, r1 ; 0x01
15ae: 89 a9 ldd r24, Y+49 ; 0x31
15b0: 87 fd sbrc r24, 7
15b2: 03 c0 rjmp .+6 ; 0x15ba <_printf_P+0x382>
15b4: 9b a9 ldd r25, Y+51 ; 0x33
15b6: 9f 7d andi r25, 0xDF ; 223
15b8: 9b ab std Y+51, r25 ; 0x33
15ba: 21 14 cp r2, r1
15bc: 31 04 cpc r3, r1
15be: 41 04 cpc r4, r1
15c0: 51 04 cpc r5, r1
15c2: 61 f4 brne .+24 ; 0x15dc <_printf_P+0x3a4>
15c4: e9 a9 ldd r30, Y+49 ; 0x31
15c6: ee 23 and r30, r30
15c8: 49 f4 brne .+18 ; 0x15dc <_printf_P+0x3a4>
15ca: 66 24 eor r6, r6
15cc: 77 24 eor r7, r7
15ce: 43 01 movw r8, r6
15d0: 5e e2 ldi r21, 0x2E ; 46
15d2: c5 2e mov r12, r21
15d4: d1 2c mov r13, r1
15d6: cc 0e add r12, r28
15d8: dd 1e adc r13, r29
15da: 3e c0 rjmp .+124 ; 0x1658 <_printf_P+0x420>
15dc: 4e e2 ldi r20, 0x2E ; 46
15de: c4 2e mov r12, r20
15e0: d1 2c mov r13, r1
15e2: cc 0e add r12, r28
15e4: dd 1e adc r13, r29
15e6: f8 a9 ldd r31, Y+48 ; 0x30
15e8: ef 2e mov r14, r31
15ea: ff 24 eor r15, r15
15ec: 00 27 eor r16, r16
15ee: 11 27 eor r17, r17
15f0: c2 01 movw r24, r4
15f2: b1 01 movw r22, r2
15f4: a8 01 movw r20, r16
15f6: 97 01 movw r18, r14
15f8: 0e 94 29 2e call 0x5c52 ; 0x5c52 <__udivmodsi4>
15fc: 6a 30 cpi r22, 0x0A ; 10
15fe: 20 f4 brcc .+8 ; 0x1608 <_printf_P+0x3d0>
1600: 30 e3 ldi r19, 0x30 ; 48
1602: a3 2e mov r10, r19
1604: a6 0e add r10, r22
1606: 08 c0 rjmp .+16 ; 0x1618 <_printf_P+0x3e0>
1608: 27 e5 ldi r18, 0x57 ; 87
160a: a2 2e mov r10, r18
160c: a6 0e add r10, r22
160e: 88 e5 ldi r24, 0x58 ; 88
1610: b8 16 cp r11, r24
1612: 11 f4 brne .+4 ; 0x1618 <_printf_P+0x3e0>
1614: 9f ed ldi r25, 0xDF ; 223
1616: a9 22 and r10, r25
1618: f6 01 movw r30, r12
161a: a2 92 st -Z, r10
161c: 6f 01 movw r12, r30
161e: c2 01 movw r24, r4
1620: b1 01 movw r22, r2
1622: a8 01 movw r20, r16
1624: 97 01 movw r18, r14
1626: 0e 94 29 2e call 0x5c52 ; 0x5c52 <__udivmodsi4>
162a: 39 01 movw r6, r18
162c: 4a 01 movw r8, r20
162e: 2e 14 cp r2, r14
1630: 3f 04 cpc r3, r15
1632: 40 06 cpc r4, r16
1634: 51 06 cpc r5, r17
1636: 18 f0 brcs .+6 ; 0x163e <_printf_P+0x406>
1638: 19 01 movw r2, r18
163a: 2a 01 movw r4, r20
163c: d9 cf rjmp .-78 ; 0x15f0 <_printf_P+0x3b8>
163e: f8 a9 ldd r31, Y+48 ; 0x30
1640: f8 30 cpi r31, 0x08 ; 8
1642: 51 f4 brne .+20 ; 0x1658 <_printf_P+0x420>
1644: 8b a9 ldd r24, Y+51 ; 0x33
1646: 83 ff sbrs r24, 3
1648: 07 c0 rjmp .+14 ; 0x1658 <_printf_P+0x420>
164a: 90 e3 ldi r25, 0x30 ; 48
164c: a9 16 cp r10, r25
164e: 21 f0 breq .+8 ; 0x1658 <_printf_P+0x420>
1650: 80 e3 ldi r24, 0x30 ; 48
1652: f6 01 movw r30, r12
1654: 82 93 st -Z, r24
1656: 6f 01 movw r12, r30
1658: ce 01 movw r24, r28
165a: 8c 19 sub r24, r12
165c: 18 2f mov r17, r24
165e: 12 5d subi r17, 0xD2 ; 210
1660: 49 a9 ldd r20, Y+49 ; 0x31
1662: 10 c0 rjmp .+32 ; 0x1684 <_printf_P+0x44c>
1664: bb 20 and r11, r11
1666: 09 f4 brne .+2 ; 0x166a <_printf_P+0x432>
1668: 5c c0 rjmp .+184 ; 0x1722 <_printf_P+0x4ea>
166a: be 82 std Y+6, r11 ; 0x06
166c: 19 82 std Y+1, r1 ; 0x01
166e: 42 01 movw r8, r4
1670: 31 01 movw r6, r2
1672: 00 e0 ldi r16, 0x00 ; 0
1674: 96 e0 ldi r25, 0x06 ; 6
1676: c9 2e mov r12, r25
1678: d1 2c mov r13, r1
167a: cc 0e add r12, r28
167c: dd 1e adc r13, r29
167e: 11 e0 ldi r17, 0x01 ; 1
1680: 21 e0 ldi r18, 0x01 ; 1
1682: 05 c0 rjmp .+10 ; 0x168e <_printf_P+0x456>
1684: 21 2f mov r18, r17
1686: 04 2f mov r16, r20
1688: 01 1b sub r16, r17
168a: 07 fd sbrc r16, 7
168c: 00 e0 ldi r16, 0x00 ; 0
168e: 89 81 ldd r24, Y+1 ; 0x01
1690: 88 23 and r24, r24
1692: 19 f0 breq .+6 ; 0x169a <_printf_P+0x462>
1694: 81 2f mov r24, r17
1696: 8f 5f subi r24, 0xFF ; 255
1698: 07 c0 rjmp .+14 ; 0x16a8 <_printf_P+0x470>
169a: 9b a9 ldd r25, Y+51 ; 0x33
169c: 96 fd sbrc r25, 6
169e: 02 c0 rjmp .+4 ; 0x16a4 <_printf_P+0x46c>
16a0: 81 2f mov r24, r17
16a2: 02 c0 rjmp .+4 ; 0x16a8 <_printf_P+0x470>
16a4: 82 2f mov r24, r18
16a6: 8e 5f subi r24, 0xFE ; 254
16a8: a8 2e mov r10, r24
16aa: a0 0e add r10, r16
16ac: eb a9 ldd r30, Y+51 ; 0x33
16ae: ee 2e mov r14, r30
16b0: ff 24 eor r15, r15
16b2: 80 e3 ldi r24, 0x30 ; 48
16b4: 48 2e mov r4, r24
16b6: 51 2c mov r5, r1
16b8: 4e 20 and r4, r14
16ba: 5f 20 and r5, r15
16bc: 41 14 cp r4, r1
16be: 51 04 cpc r5, r1
16c0: 21 f4 brne .+8 ; 0x16ca <_printf_P+0x492>
16c2: 8a a9 ldd r24, Y+50 ; 0x32
16c4: 8a 19 sub r24, r10
16c6: 0e 94 e7 08 call 0x11ce ; 0x11ce <PAD_SP>
16ca: 89 81 ldd r24, Y+1 ; 0x01
16cc: 88 23 and r24, r24
16ce: 29 f0 breq .+10 ; 0x16da <_printf_P+0x4a2>
16d0: 61 e0 ldi r22, 0x01 ; 1
16d2: 70 e0 ldi r23, 0x00 ; 0
16d4: ce 01 movw r24, r28
16d6: 01 96 adiw r24, 0x01 ; 1
16d8: 09 c0 rjmp .+18 ; 0x16ec <_printf_P+0x4b4>
16da: e6 fe sbrs r14, 6
16dc: 09 c0 rjmp .+18 ; 0x16f0 <_printf_P+0x4b8>
16de: 80 e3 ldi r24, 0x30 ; 48
16e0: 8a 83 std Y+2, r24 ; 0x02
16e2: bb 82 std Y+3, r11 ; 0x03
16e4: 62 e0 ldi r22, 0x02 ; 2
16e6: 70 e0 ldi r23, 0x00 ; 0
16e8: ce 01 movw r24, r28
16ea: 02 96 adiw r24, 0x02 ; 2
16ec: 0e 94 08 09 call 0x1210 ; 0x1210 <PRINT>
16f0: f0 e2 ldi r31, 0x20 ; 32
16f2: 4f 16 cp r4, r31
16f4: 51 04 cpc r5, r1
16f6: 21 f4 brne .+8 ; 0x1700 <_printf_P+0x4c8>
16f8: 8a a9 ldd r24, Y+50 ; 0x32
16fa: 8a 19 sub r24, r10
16fc: 0e 94 dc 08 call 0x11b8 ; 0x11b8 <PAD_0>
1700: 80 2f mov r24, r16
1702: 0e 94 dc 08 call 0x11b8 ; 0x11b8 <PAD_0>
1706: 61 2f mov r22, r17
1708: 77 27 eor r23, r23
170a: 67 fd sbrc r22, 7
170c: 70 95 com r23
170e: c6 01 movw r24, r12
1710: 0e 94 08 09 call 0x1210 ; 0x1210 <PRINT>
1714: e4 fe sbrs r14, 4
1716: aa cd rjmp .-1196 ; 0x126c <_printf_P+0x34>
1718: 8a a9 ldd r24, Y+50 ; 0x32
171a: 8a 19 sub r24, r10
171c: 0e 94 e7 08 call 0x11ce ; 0x11ce <PAD_SP>
1720: a5 cd rjmp .-1206 ; 0x126c <_printf_P+0x34>
1722: e2 e1 ldi r30, 0x12 ; 18
1724: cd 5c subi r28, 0xCD ; 205
1726: 0c 94 82 2e jmp 0x5d04 ; 0x5d04 <__epilogue_restores__>
 
0000172a <Timer_Init>:
172a: 82 e0 ldi r24, 0x02 ; 2
172c: 85 bd out 0x25, r24 ; 37
172e: 83 ea ldi r24, 0xA3 ; 163
1730: 84 bd out 0x24, r24 ; 36
1732: 17 bc out 0x27, r1 ; 39
1734: 88 e7 ldi r24, 0x78 ; 120
1736: 88 bd out 0x28, r24 ; 40
1738: 83 ec ldi r24, 0xC3 ; 195
173a: 80 93 b0 00 sts 0x00B0, r24
173e: 86 e0 ldi r24, 0x06 ; 6
1740: 80 93 b1 00 sts 0x00B1, r24
1744: e0 e7 ldi r30, 0x70 ; 112
1746: f0 e0 ldi r31, 0x00 ; 0
1748: 80 81 ld r24, Z
174a: 82 60 ori r24, 0x02 ; 2
174c: 80 83 st Z, r24
174e: ee e6 ldi r30, 0x6E ; 110
1750: f0 e0 ldi r31, 0x00 ; 0
1752: 80 81 ld r24, Z
1754: 81 60 ori r24, 0x01 ; 1
1756: 80 83 st Z, r24
1758: 8a e0 ldi r24, 0x0A ; 10
175a: 80 93 b3 00 sts 0x00B3, r24
175e: 10 92 b2 00 sts 0x00B2, r1
1762: 08 95 ret
 
00001764 <SetDelay>:
1764: 20 91 a3 01 lds r18, 0x01A3
1768: 30 91 a4 01 lds r19, 0x01A4
176c: 2f 5f subi r18, 0xFF ; 255
176e: 3f 4f sbci r19, 0xFF ; 255
1770: 82 0f add r24, r18
1772: 93 1f adc r25, r19
1774: 08 95 ret
 
00001776 <CheckDelay>:
1776: 20 91 a3 01 lds r18, 0x01A3
177a: 30 91 a4 01 lds r19, 0x01A4
177e: 82 1b sub r24, r18
1780: 93 0b sbc r25, r19
1782: 89 2f mov r24, r25
1784: 99 27 eor r25, r25
1786: 86 95 lsr r24
1788: 80 74 andi r24, 0x40 ; 64
178a: 99 27 eor r25, r25
178c: 08 95 ret
 
0000178e <__vector_9>:
178e: 1f 92 push r1
1790: 0f 92 push r0
1792: 0f b6 in r0, 0x3f ; 63
1794: 0f 92 push r0
1796: 11 24 eor r1, r1
1798: ef 92 push r14
179a: ff 92 push r15
179c: 0f 93 push r16
179e: 1f 93 push r17
17a0: 2f 93 push r18
17a2: 3f 93 push r19
17a4: 4f 93 push r20
17a6: 5f 93 push r21
17a8: 6f 93 push r22
17aa: 7f 93 push r23
17ac: 8f 93 push r24
17ae: 9f 93 push r25
17b0: af 93 push r26
17b2: bf 93 push r27
17b4: cf 93 push r28
17b6: df 93 push r29
17b8: ef 93 push r30
17ba: ff 93 push r31
17bc: 80 91 02 01 lds r24, 0x0102
17c0: 81 50 subi r24, 0x01 ; 1
17c2: 80 93 02 01 sts 0x0102, r24
17c6: 8f 3f cpi r24, 0xFF ; 255
17c8: 09 f0 breq .+2 ; 0x17cc <__vector_9+0x3e>
17ca: 69 c0 rjmp .+210 ; 0x189e <__vector_9+0x110>
17cc: 83 e8 ldi r24, 0x83 ; 131
17ce: 80 93 b0 00 sts 0x00B0, r24
17d2: 80 91 89 01 lds r24, 0x0189
17d6: c8 2f mov r28, r24
17d8: dd 27 eor r29, r29
17da: d0 93 a9 01 sts 0x01A9, r29
17de: c0 93 a8 01 sts 0x01A8, r28
17e2: 80 91 fa 04 lds r24, 0x04FA
17e6: e0 90 f6 04 lds r14, 0x04F6
17ea: 20 91 d7 01 lds r18, 0x01D7
17ee: 30 91 d8 01 lds r19, 0x01D8
17f2: 40 91 d9 01 lds r20, 0x01D9
17f6: 50 91 da 01 lds r21, 0x01DA
17fa: 80 ff sbrs r24, 0
17fc: 18 c0 rjmp .+48 ; 0x182e <__vector_9+0xa0>
17fe: ff 24 eor r15, r15
1800: 00 27 eor r16, r16
1802: 11 27 eor r17, r17
1804: ca 01 movw r24, r20
1806: b9 01 movw r22, r18
1808: 20 e8 ldi r18, 0x80 ; 128
180a: 30 e0 ldi r19, 0x00 ; 0
180c: 40 e0 ldi r20, 0x00 ; 0
180e: 50 e0 ldi r21, 0x00 ; 0
1810: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
1814: c8 01 movw r24, r16
1816: b7 01 movw r22, r14
1818: 0e 94 e3 2d call 0x5bc6 ; 0x5bc6 <__mulsi3>
181c: 20 e0 ldi r18, 0x00 ; 0
181e: 32 e0 ldi r19, 0x02 ; 2
1820: 40 e0 ldi r20, 0x00 ; 0
1822: 50 e0 ldi r21, 0x00 ; 0
1824: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
1828: c2 0f add r28, r18
182a: d3 1f adc r29, r19
182c: 17 c0 rjmp .+46 ; 0x185c <__vector_9+0xce>
182e: ff 24 eor r15, r15
1830: 00 27 eor r16, r16
1832: 11 27 eor r17, r17
1834: ca 01 movw r24, r20
1836: b9 01 movw r22, r18
1838: 20 e8 ldi r18, 0x80 ; 128
183a: 30 e0 ldi r19, 0x00 ; 0
183c: 40 e0 ldi r20, 0x00 ; 0
183e: 50 e0 ldi r21, 0x00 ; 0
1840: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
1844: c8 01 movw r24, r16
1846: b7 01 movw r22, r14
1848: 0e 94 e3 2d call 0x5bc6 ; 0x5bc6 <__mulsi3>
184c: 20 e0 ldi r18, 0x00 ; 0
184e: 32 e0 ldi r19, 0x02 ; 2
1850: 40 e0 ldi r20, 0x00 ; 0
1852: 50 e0 ldi r21, 0x00 ; 0
1854: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
1858: c2 1b sub r28, r18
185a: d3 0b sbc r29, r19
185c: d0 93 a9 01 sts 0x01A9, r29
1860: c0 93 a8 01 sts 0x01A8, r28
1864: 20 91 a8 01 lds r18, 0x01A8
1868: 30 91 a9 01 lds r19, 0x01A9
186c: 80 91 f7 04 lds r24, 0x04F7
1870: 99 27 eor r25, r25
1872: 28 17 cp r18, r24
1874: 39 07 cpc r19, r25
1876: 34 f0 brlt .+12 ; 0x1884 <__vector_9+0xf6>
1878: 80 91 f8 04 lds r24, 0x04F8
187c: 99 27 eor r25, r25
187e: 82 17 cp r24, r18
1880: 93 07 cpc r25, r19
1882: 24 f4 brge .+8 ; 0x188c <__vector_9+0xfe>
1884: 90 93 a9 01 sts 0x01A9, r25
1888: 80 93 a8 01 sts 0x01A8, r24
188c: 80 91 a8 01 lds r24, 0x01A8
1890: 80 93 b3 00 sts 0x00B3, r24
1894: 80 91 f9 04 lds r24, 0x04F9
1898: 80 93 02 01 sts 0x0102, r24
189c: 04 c0 rjmp .+8 ; 0x18a6 <__vector_9+0x118>
189e: 83 e0 ldi r24, 0x03 ; 3
18a0: 80 93 b0 00 sts 0x00B0, r24
18a4: 5f 98 cbi 0x0b, 7 ; 11
18a6: ff 91 pop r31
18a8: ef 91 pop r30
18aa: df 91 pop r29
18ac: cf 91 pop r28
18ae: bf 91 pop r27
18b0: af 91 pop r26
18b2: 9f 91 pop r25
18b4: 8f 91 pop r24
18b6: 7f 91 pop r23
18b8: 6f 91 pop r22
18ba: 5f 91 pop r21
18bc: 4f 91 pop r20
18be: 3f 91 pop r19
18c0: 2f 91 pop r18
18c2: 1f 91 pop r17
18c4: 0f 91 pop r16
18c6: ff 90 pop r15
18c8: ef 90 pop r14
18ca: 0f 90 pop r0
18cc: 0f be out 0x3f, r0 ; 63
18ce: 0f 90 pop r0
18d0: 1f 90 pop r1
18d2: 18 95 reti
 
000018d4 <__vector_18>:
18d4: 1f 92 push r1
18d6: 0f 92 push r0
18d8: 0f b6 in r0, 0x3f ; 63
18da: 0f 92 push r0
18dc: 11 24 eor r1, r1
18de: 2f 93 push r18
18e0: 3f 93 push r19
18e2: 4f 93 push r20
18e4: 5f 93 push r21
18e6: 6f 93 push r22
18e8: 7f 93 push r23
18ea: 8f 93 push r24
18ec: 9f 93 push r25
18ee: af 93 push r26
18f0: bf 93 push r27
18f2: ef 93 push r30
18f4: ff 93 push r31
18f6: 80 91 aa 01 lds r24, 0x01AA
18fa: 81 50 subi r24, 0x01 ; 1
18fc: 80 93 aa 01 sts 0x01AA, r24
1900: 8f 3f cpi r24, 0xFF ; 255
1902: 01 f5 brne .+64 ; 0x1944 <__vector_18+0x70>
1904: 8a e0 ldi r24, 0x0A ; 10
1906: 80 93 aa 01 sts 0x01AA, r24
190a: 80 91 03 01 lds r24, 0x0103
190e: 8f 5f subi r24, 0xFF ; 255
1910: 81 70 andi r24, 0x01 ; 1
1912: 80 93 03 01 sts 0x0103, r24
1916: 88 23 and r24, r24
1918: 19 f4 brne .+6 ; 0x1920 <__vector_18+0x4c>
191a: 81 e0 ldi r24, 0x01 ; 1
191c: 80 93 a5 01 sts 0x01A5, r24
1920: 80 91 a3 01 lds r24, 0x01A3
1924: 90 91 a4 01 lds r25, 0x01A4
1928: 01 96 adiw r24, 0x01 ; 1
192a: 90 93 a4 01 sts 0x01A4, r25
192e: 80 93 a3 01 sts 0x01A3, r24
1932: 80 91 d0 01 lds r24, 0x01D0
1936: 88 23 and r24, r24
1938: 29 f0 breq .+10 ; 0x1944 <__vector_18+0x70>
193a: 80 91 d0 01 lds r24, 0x01D0
193e: 81 50 subi r24, 0x01 ; 1
1940: 80 93 d0 01 sts 0x01D0, r24
1944: 80 91 a6 01 lds r24, 0x01A6
1948: 90 91 a7 01 lds r25, 0x01A7
194c: 02 97 sbiw r24, 0x02 ; 2
194e: 58 f0 brcs .+22 ; 0x1966 <__vector_18+0x92>
1950: 80 91 a6 01 lds r24, 0x01A6
1954: 90 91 a7 01 lds r25, 0x01A7
1958: 01 97 sbiw r24, 0x01 ; 1
195a: 90 93 a7 01 sts 0x01A7, r25
195e: 80 93 a6 01 sts 0x01A6, r24
1962: 5a 9a sbi 0x0b, 2 ; 11
1964: 01 c0 rjmp .+2 ; 0x1968 <__vector_18+0x94>
1966: 5a 98 cbi 0x0b, 2 ; 11
1968: 80 91 dc 04 lds r24, 0x04DC
196c: 83 ff sbrs r24, 3
196e: 02 c0 rjmp .+4 ; 0x1974 <__vector_18+0xa0>
1970: 0e 94 15 16 call 0x2c2a ; 0x2c2a <timer0_MM3>
1974: ff 91 pop r31
1976: ef 91 pop r30
1978: bf 91 pop r27
197a: af 91 pop r26
197c: 9f 91 pop r25
197e: 8f 91 pop r24
1980: 7f 91 pop r23
1982: 6f 91 pop r22
1984: 5f 91 pop r21
1986: 4f 91 pop r20
1988: 3f 91 pop r19
198a: 2f 91 pop r18
198c: 0f 90 pop r0
198e: 0f be out 0x3f, r0 ; 63
1990: 0f 90 pop r0
1992: 1f 90 pop r1
1994: 18 95 reti
 
00001996 <Delay_ms>:
1996: 20 91 a3 01 lds r18, 0x01A3
199a: 30 91 a4 01 lds r19, 0x01A4
199e: 2f 5f subi r18, 0xFF ; 255
19a0: 3f 4f sbci r19, 0xFF ; 255
19a2: 28 0f add r18, r24
19a4: 39 1f adc r19, r25
19a6: 80 91 a3 01 lds r24, 0x01A3
19aa: 90 91 a4 01 lds r25, 0x01A4
19ae: a9 01 movw r20, r18
19b0: 48 1b sub r20, r24
19b2: 59 0b sbc r21, r25
19b4: 57 ff sbrs r21, 7
19b6: f7 cf rjmp .-18 ; 0x19a6 <Delay_ms+0x10>
19b8: 08 95 ret
 
000019ba <ADC_Init>:
19ba: 10 92 7c 00 sts 0x007C, r1
19be: 8f ec ldi r24, 0xCF ; 207
19c0: 80 93 7a 00 sts 0x007A, r24
19c4: 08 95 ret
 
000019c6 <__vector_24>:
19c6: 1f 92 push r1
19c8: 0f 92 push r0
19ca: 0f b6 in r0, 0x3f ; 63
19cc: 0f 92 push r0
19ce: 11 24 eor r1, r1
19d0: ef 92 push r14
19d2: ff 92 push r15
19d4: 0f 93 push r16
19d6: 1f 93 push r17
19d8: 2f 93 push r18
19da: 3f 93 push r19
19dc: 4f 93 push r20
19de: 5f 93 push r21
19e0: 6f 93 push r22
19e2: 7f 93 push r23
19e4: 8f 93 push r24
19e6: 9f 93 push r25
19e8: af 93 push r26
19ea: bf 93 push r27
19ec: cf 93 push r28
19ee: df 93 push r29
19f0: ef 93 push r30
19f2: ff 93 push r31
19f4: 10 92 7a 00 sts 0x007A, r1
19f8: 80 91 c1 01 lds r24, 0x01C1
19fc: 8f 5f subi r24, 0xFF ; 255
19fe: 80 93 c1 01 sts 0x01C1, r24
1a02: 81 50 subi r24, 0x01 ; 1
1a04: e8 2f mov r30, r24
1a06: ff 27 eor r31, r31
1a08: e8 30 cpi r30, 0x08 ; 8
1a0a: f1 05 cpc r31, r1
1a0c: 08 f0 brcs .+2 ; 0x1a10 <__vector_24+0x4a>
1a0e: cf c2 rjmp .+1438 ; 0x1fae <__vector_24+0x5e8>
1a10: e4 5b subi r30, 0xB4 ; 180
1a12: ff 4f sbci r31, 0xFF ; 255
1a14: 0c 94 9d 2e jmp 0x5d3a ; 0x5d3a <__tablejump2__>
1a18: 20 91 d5 01 lds r18, 0x01D5
1a1c: 30 91 d6 01 lds r19, 0x01D6
1a20: 80 91 78 00 lds r24, 0x0078
1a24: 90 91 79 00 lds r25, 0x0079
1a28: 28 1b sub r18, r24
1a2a: 39 0b sbc r19, r25
1a2c: 80 91 af 01 lds r24, 0x01AF
1a30: 90 91 b0 01 lds r25, 0x01B0
1a34: 82 0f add r24, r18
1a36: 93 1f adc r25, r19
1a38: 90 93 b0 01 sts 0x01B0, r25
1a3c: 80 93 af 01 sts 0x01AF, r24
1a40: 80 91 b9 01 lds r24, 0x01B9
1a44: 8f 5f subi r24, 0xFF ; 255
1a46: 80 93 b9 01 sts 0x01B9, r24
1a4a: 80 91 fb 01 lds r24, 0x01FB
1a4e: 90 91 fc 01 lds r25, 0x01FC
1a52: a0 91 fd 01 lds r26, 0x01FD
1a56: b0 91 fe 01 lds r27, 0x01FE
1a5a: 44 27 eor r20, r20
1a5c: 37 fd sbrc r19, 7
1a5e: 40 95 com r20
1a60: 54 2f mov r21, r20
1a62: 82 0f add r24, r18
1a64: 93 1f adc r25, r19
1a66: a4 1f adc r26, r20
1a68: b5 1f adc r27, r21
1a6a: 80 93 fb 01 sts 0x01FB, r24
1a6e: 90 93 fc 01 sts 0x01FC, r25
1a72: a0 93 fd 01 sts 0x01FD, r26
1a76: b0 93 fe 01 sts 0x01FE, r27
1a7a: 80 91 ff 01 lds r24, 0x01FF
1a7e: 90 91 00 02 lds r25, 0x0200
1a82: a0 91 01 02 lds r26, 0x0201
1a86: b0 91 02 02 lds r27, 0x0202
1a8a: 82 0f add r24, r18
1a8c: 93 1f adc r25, r19
1a8e: a4 1f adc r26, r20
1a90: b5 1f adc r27, r21
1a92: 80 93 ff 01 sts 0x01FF, r24
1a96: 90 93 00 02 sts 0x0200, r25
1a9a: a0 93 01 02 sts 0x0201, r26
1a9e: b0 93 02 02 sts 0x0202, r27
1aa2: 81 e0 ldi r24, 0x01 ; 1
1aa4: 80 93 c2 01 sts 0x01C2, r24
1aa8: 80 91 bf 01 lds r24, 0x01BF
1aac: 90 91 c0 01 lds r25, 0x01C0
1ab0: 01 96 adiw r24, 0x01 ; 1
1ab2: 90 93 c0 01 sts 0x01C0, r25
1ab6: 80 93 bf 01 sts 0x01BF, r24
1aba: 7d c2 rjmp .+1274 ; 0x1fb6 <__vector_24+0x5f0>
1abc: 60 91 78 00 lds r22, 0x0078
1ac0: 70 91 79 00 lds r23, 0x0079
1ac4: 80 91 d3 01 lds r24, 0x01D3
1ac8: 90 91 d4 01 lds r25, 0x01D4
1acc: 68 1b sub r22, r24
1ace: 79 0b sbc r23, r25
1ad0: 80 91 f3 01 lds r24, 0x01F3
1ad4: 90 91 f4 01 lds r25, 0x01F4
1ad8: a0 91 f5 01 lds r26, 0x01F5
1adc: b0 91 f6 01 lds r27, 0x01F6
1ae0: 9b 01 movw r18, r22
1ae2: 44 27 eor r20, r20
1ae4: 37 fd sbrc r19, 7
1ae6: 40 95 com r20
1ae8: 54 2f mov r21, r20
1aea: 82 0f add r24, r18
1aec: 93 1f adc r25, r19
1aee: a4 1f adc r26, r20
1af0: b5 1f adc r27, r21
1af2: 80 93 f3 01 sts 0x01F3, r24
1af6: 90 93 f4 01 sts 0x01F4, r25
1afa: a0 93 f5 01 sts 0x01F5, r26
1afe: b0 93 f6 01 sts 0x01F6, r27
1b02: 80 91 f7 01 lds r24, 0x01F7
1b06: 90 91 f8 01 lds r25, 0x01F8
1b0a: a0 91 f9 01 lds r26, 0x01F9
1b0e: b0 91 fa 01 lds r27, 0x01FA
1b12: 82 0f add r24, r18
1b14: 93 1f adc r25, r19
1b16: a4 1f adc r26, r20
1b18: b5 1f adc r27, r21
1b1a: 80 93 f7 01 sts 0x01F7, r24
1b1e: 90 93 f8 01 sts 0x01F8, r25
1b22: a0 93 f9 01 sts 0x01F9, r26
1b26: b0 93 fa 01 sts 0x01FA, r27
1b2a: 80 91 78 00 lds r24, 0x0078
1b2e: 90 91 79 00 lds r25, 0x0079
1b32: 0a 97 sbiw r24, 0x0a ; 10
1b34: 10 f4 brcc .+4 ; 0x1b3a <__vector_24+0x174>
1b36: 64 e4 ldi r22, 0x44 ; 68
1b38: 7d ef ldi r23, 0xFD ; 253
1b3a: 80 91 78 00 lds r24, 0x0078
1b3e: 90 91 79 00 lds r25, 0x0079
1b42: 89 5e subi r24, 0xE9 ; 233
1b44: 93 40 sbci r25, 0x03 ; 3
1b46: 10 f0 brcs .+4 ; 0x1b4c <__vector_24+0x186>
1b48: 6c eb ldi r22, 0xBC ; 188
1b4a: 72 e0 ldi r23, 0x02 ; 2
1b4c: 80 91 ad 01 lds r24, 0x01AD
1b50: 90 91 ae 01 lds r25, 0x01AE
1b54: 86 0f add r24, r22
1b56: 97 1f adc r25, r23
1b58: 90 93 ae 01 sts 0x01AE, r25
1b5c: 80 93 ad 01 sts 0x01AD, r24
1b60: 80 91 b8 01 lds r24, 0x01B8
1b64: 8f 5f subi r24, 0xFF ; 255
1b66: 80 93 b8 01 sts 0x01B8, r24
1b6a: 82 e0 ldi r24, 0x02 ; 2
1b6c: 58 c0 rjmp .+176 ; 0x1c1e <__vector_24+0x258>
1b6e: 60 91 78 00 lds r22, 0x0078
1b72: 70 91 79 00 lds r23, 0x0079
1b76: 80 91 d1 01 lds r24, 0x01D1
1b7a: 90 91 d2 01 lds r25, 0x01D2
1b7e: 68 1b sub r22, r24
1b80: 79 0b sbc r23, r25
1b82: 80 91 eb 01 lds r24, 0x01EB
1b86: 90 91 ec 01 lds r25, 0x01EC
1b8a: a0 91 ed 01 lds r26, 0x01ED
1b8e: b0 91 ee 01 lds r27, 0x01EE
1b92: 9b 01 movw r18, r22
1b94: 44 27 eor r20, r20
1b96: 37 fd sbrc r19, 7
1b98: 40 95 com r20
1b9a: 54 2f mov r21, r20
1b9c: 82 0f add r24, r18
1b9e: 93 1f adc r25, r19
1ba0: a4 1f adc r26, r20
1ba2: b5 1f adc r27, r21
1ba4: 80 93 eb 01 sts 0x01EB, r24
1ba8: 90 93 ec 01 sts 0x01EC, r25
1bac: a0 93 ed 01 sts 0x01ED, r26
1bb0: b0 93 ee 01 sts 0x01EE, r27
1bb4: 80 91 ef 01 lds r24, 0x01EF
1bb8: 90 91 f0 01 lds r25, 0x01F0
1bbc: a0 91 f1 01 lds r26, 0x01F1
1bc0: b0 91 f2 01 lds r27, 0x01F2
1bc4: 82 0f add r24, r18
1bc6: 93 1f adc r25, r19
1bc8: a4 1f adc r26, r20
1bca: b5 1f adc r27, r21
1bcc: 80 93 ef 01 sts 0x01EF, r24
1bd0: 90 93 f0 01 sts 0x01F0, r25
1bd4: a0 93 f1 01 sts 0x01F1, r26
1bd8: b0 93 f2 01 sts 0x01F2, r27
1bdc: 80 91 78 00 lds r24, 0x0078
1be0: 90 91 79 00 lds r25, 0x0079
1be4: 0a 97 sbiw r24, 0x0a ; 10
1be6: 10 f4 brcc .+4 ; 0x1bec <__vector_24+0x226>
1be8: 64 e4 ldi r22, 0x44 ; 68
1bea: 7d ef ldi r23, 0xFD ; 253
1bec: 80 91 78 00 lds r24, 0x0078
1bf0: 90 91 79 00 lds r25, 0x0079
1bf4: 89 5e subi r24, 0xE9 ; 233
1bf6: 93 40 sbci r25, 0x03 ; 3
1bf8: 10 f0 brcs .+4 ; 0x1bfe <__vector_24+0x238>
1bfa: 6c eb ldi r22, 0xBC ; 188
1bfc: 72 e0 ldi r23, 0x02 ; 2
1bfe: 80 91 ab 01 lds r24, 0x01AB
1c02: 90 91 ac 01 lds r25, 0x01AC
1c06: 86 0f add r24, r22
1c08: 97 1f adc r25, r23
1c0a: 90 93 ac 01 sts 0x01AC, r25
1c0e: 80 93 ab 01 sts 0x01AB, r24
1c12: 80 91 b7 01 lds r24, 0x01B7
1c16: 8f 5f subi r24, 0xFF ; 255
1c18: 80 93 b7 01 sts 0x01B7, r24
1c1c: 84 e0 ldi r24, 0x04 ; 4
1c1e: 80 93 c2 01 sts 0x01C2, r24
1c22: c9 c1 rjmp .+914 ; 0x1fb6 <__vector_24+0x5f0>
1c24: 40 91 04 01 lds r20, 0x0104
1c28: 50 91 05 01 lds r21, 0x0105
1c2c: 80 91 78 00 lds r24, 0x0078
1c30: 90 91 79 00 lds r25, 0x0079
1c34: 9a 01 movw r18, r20
1c36: 22 0f add r18, r18
1c38: 33 1f adc r19, r19
1c3a: 24 0f add r18, r20
1c3c: 35 1f adc r19, r21
1c3e: 63 e0 ldi r22, 0x03 ; 3
1c40: 70 e0 ldi r23, 0x00 ; 0
1c42: 0e 94 02 2e call 0x5c04 ; 0x5c04 <__udivmodhi4>
1c46: 26 0f add r18, r22
1c48: 37 1f adc r19, r23
1c4a: 36 95 lsr r19
1c4c: 27 95 ror r18
1c4e: 36 95 lsr r19
1c50: 27 95 ror r18
1c52: 30 93 05 01 sts 0x0105, r19
1c56: 20 93 04 01 sts 0x0104, r18
1c5a: 86 e0 ldi r24, 0x06 ; 6
1c5c: e0 cf rjmp .-64 ; 0x1c1e <__vector_24+0x258>
1c5e: 80 91 1b 05 lds r24, 0x051B
1c62: 90 91 1c 05 lds r25, 0x051C
1c66: 20 91 78 00 lds r18, 0x0078
1c6a: 30 91 79 00 lds r19, 0x0079
1c6e: 82 1b sub r24, r18
1c70: 93 0b sbc r25, r19
1c72: 90 93 7c 04 sts 0x047C, r25
1c76: 80 93 7b 04 sts 0x047B, r24
1c7a: 80 91 b1 01 lds r24, 0x01B1
1c7e: 90 91 b2 01 lds r25, 0x01B2
1c82: 20 91 7b 04 lds r18, 0x047B
1c86: 30 91 7c 04 lds r19, 0x047C
1c8a: 82 0f add r24, r18
1c8c: 93 1f adc r25, r19
1c8e: 90 93 b2 01 sts 0x01B2, r25
1c92: 80 93 b1 01 sts 0x01B1, r24
1c96: 80 91 bb 01 lds r24, 0x01BB
1c9a: 8f 5f subi r24, 0xFF ; 255
1c9c: 80 93 bb 01 sts 0x01BB, r24
1ca0: 87 e0 ldi r24, 0x07 ; 7
1ca2: bd cf rjmp .-134 ; 0x1c1e <__vector_24+0x258>
1ca4: 80 91 78 00 lds r24, 0x0078
1ca8: 90 91 79 00 lds r25, 0x0079
1cac: 20 91 19 05 lds r18, 0x0519
1cb0: 30 91 1a 05 lds r19, 0x051A
1cb4: 82 1b sub r24, r18
1cb6: 93 0b sbc r25, r19
1cb8: 90 93 87 04 sts 0x0487, r25
1cbc: 80 93 86 04 sts 0x0486, r24
1cc0: 80 91 b3 01 lds r24, 0x01B3
1cc4: 90 91 b4 01 lds r25, 0x01B4
1cc8: 20 91 86 04 lds r18, 0x0486
1ccc: 30 91 87 04 lds r19, 0x0487
1cd0: 82 0f add r24, r18
1cd2: 93 1f adc r25, r19
1cd4: 90 93 b4 01 sts 0x01B4, r25
1cd8: 80 93 b3 01 sts 0x01B3, r24
1cdc: 80 91 ba 01 lds r24, 0x01BA
1ce0: 8f 5f subi r24, 0xFF ; 255
1ce2: 80 93 ba 01 sts 0x01BA, r24
1ce6: 85 e0 ldi r24, 0x05 ; 5
1ce8: 80 93 c2 01 sts 0x01C2, r24
1cec: 86 e0 ldi r24, 0x06 ; 6
1cee: e4 c0 rjmp .+456 ; 0x1eb8 <__vector_24+0x4f2>
1cf0: 60 91 78 00 lds r22, 0x0078
1cf4: 70 91 79 00 lds r23, 0x0079
1cf8: e0 90 1d 05 lds r14, 0x051D
1cfc: f0 90 1e 05 lds r15, 0x051E
1d00: 00 91 1f 05 lds r16, 0x051F
1d04: 10 91 20 05 lds r17, 0x0520
1d08: 88 27 eor r24, r24
1d0a: 77 fd sbrc r23, 7
1d0c: 80 95 com r24
1d0e: 98 2f mov r25, r24
1d10: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
1d14: a8 01 movw r20, r16
1d16: 97 01 movw r18, r14
1d18: 0e 94 7b 2c call 0x58f6 ; 0x58f6 <__subsf3>
1d1c: 0e 94 04 2d call 0x5a08 ; 0x5a08 <__fixsfsi>
1d20: 70 93 b6 01 sts 0x01B6, r23
1d24: 60 93 b5 01 sts 0x01B5, r22
1d28: 20 91 b5 01 lds r18, 0x01B5
1d2c: 30 91 b6 01 lds r19, 0x01B6
1d30: e0 91 7b 04 lds r30, 0x047B
1d34: f0 91 7c 04 lds r31, 0x047C
1d38: 80 91 86 04 lds r24, 0x0486
1d3c: 90 91 87 04 lds r25, 0x0487
1d40: 97 ff sbrs r25, 7
1d42: 03 c0 rjmp .+6 ; 0x1d4a <__vector_24+0x384>
1d44: 90 95 com r25
1d46: 81 95 neg r24
1d48: 9f 4f sbci r25, 0xFF ; 255
1d4a: 64 e0 ldi r22, 0x04 ; 4
1d4c: 70 e0 ldi r23, 0x00 ; 0
1d4e: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
1d52: eb 01 movw r28, r22
1d54: cf 01 movw r24, r30
1d56: f7 ff sbrs r31, 7
1d58: 03 c0 rjmp .+6 ; 0x1d60 <__vector_24+0x39a>
1d5a: 90 95 com r25
1d5c: 81 95 neg r24
1d5e: 9f 4f sbci r25, 0xFF ; 255
1d60: 64 e0 ldi r22, 0x04 ; 4
1d62: 70 e0 ldi r23, 0x00 ; 0
1d64: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
1d68: 26 0f add r18, r22
1d6a: 37 1f adc r19, r23
1d6c: 2c 0f add r18, r28
1d6e: 3d 1f adc r19, r29
1d70: 30 93 b6 01 sts 0x01B6, r19
1d74: 20 93 b5 01 sts 0x01B5, r18
1d78: 80 91 b5 01 lds r24, 0x01B5
1d7c: 90 91 b6 01 lds r25, 0x01B6
1d80: 02 97 sbiw r24, 0x02 ; 2
1d82: 04 f1 brlt .+64 ; 0x1dc4 <__vector_24+0x3fe>
1d84: 60 91 1d 05 lds r22, 0x051D
1d88: 70 91 1e 05 lds r23, 0x051E
1d8c: 80 91 1f 05 lds r24, 0x051F
1d90: 90 91 20 05 lds r25, 0x0520
1d94: 20 e0 ldi r18, 0x00 ; 0
1d96: 30 e0 ldi r19, 0x00 ; 0
1d98: 48 e4 ldi r20, 0x48 ; 72
1d9a: 54 e4 ldi r21, 0x44 ; 68
1d9c: 0e 94 2b 2d call 0x5a56 ; 0x5a56 <__eqsf2>
1da0: 88 23 and r24, r24
1da2: 0c f0 brlt .+2 ; 0x1da6 <__vector_24+0x3e0>
1da4: 3c c0 rjmp .+120 ; 0x1e1e <__vector_24+0x458>
1da6: 60 91 1d 05 lds r22, 0x051D
1daa: 70 91 1e 05 lds r23, 0x051E
1dae: 80 91 1f 05 lds r24, 0x051F
1db2: 90 91 20 05 lds r25, 0x0520
1db6: 2a e0 ldi r18, 0x0A ; 10
1db8: 37 ed ldi r19, 0xD7 ; 215
1dba: 43 ea ldi r20, 0xA3 ; 163
1dbc: 5c e3 ldi r21, 0x3C ; 60
1dbe: 0e 94 7c 2c call 0x58f8 ; 0x58f8 <__addsf3>
1dc2: 25 c0 rjmp .+74 ; 0x1e0e <__vector_24+0x448>
1dc4: 80 91 b5 01 lds r24, 0x01B5
1dc8: 90 91 b6 01 lds r25, 0x01B6
1dcc: 8f 5f subi r24, 0xFF ; 255
1dce: 9f 4f sbci r25, 0xFF ; 255
1dd0: 34 f5 brge .+76 ; 0x1e1e <__vector_24+0x458>
1dd2: 60 91 1d 05 lds r22, 0x051D
1dd6: 70 91 1e 05 lds r23, 0x051E
1dda: 80 91 1f 05 lds r24, 0x051F
1dde: 90 91 20 05 lds r25, 0x0520
1de2: 20 e0 ldi r18, 0x00 ; 0
1de4: 30 e0 ldi r19, 0x00 ; 0
1de6: 46 e1 ldi r20, 0x16 ; 22
1de8: 54 e4 ldi r21, 0x44 ; 68
1dea: 0e 94 2e 2d call 0x5a5c ; 0x5a5c <__gesf2>
1dee: 18 16 cp r1, r24
1df0: b4 f4 brge .+44 ; 0x1e1e <__vector_24+0x458>
1df2: 60 91 1d 05 lds r22, 0x051D
1df6: 70 91 1e 05 lds r23, 0x051E
1dfa: 80 91 1f 05 lds r24, 0x051F
1dfe: 90 91 20 05 lds r25, 0x0520
1e02: 2a e0 ldi r18, 0x0A ; 10
1e04: 37 ed ldi r19, 0xD7 ; 215
1e06: 43 ea ldi r20, 0xA3 ; 163
1e08: 5c e3 ldi r21, 0x3C ; 60
1e0a: 0e 94 7b 2c call 0x58f6 ; 0x58f6 <__subsf3>
1e0e: 60 93 1d 05 sts 0x051D, r22
1e12: 70 93 1e 05 sts 0x051E, r23
1e16: 80 93 1f 05 sts 0x051F, r24
1e1a: 90 93 20 05 sts 0x0520, r25
1e1e: 81 e0 ldi r24, 0x01 ; 1
1e20: 80 93 bc 01 sts 0x01BC, r24
1e24: 80 91 78 00 lds r24, 0x0078
1e28: 90 91 79 00 lds r25, 0x0079
1e2c: 90 93 7e 04 sts 0x047E, r25
1e30: 80 93 7d 04 sts 0x047D, r24
1e34: 20 91 03 02 lds r18, 0x0203
1e38: 30 91 04 02 lds r19, 0x0204
1e3c: 40 91 05 02 lds r20, 0x0205
1e40: 50 91 06 02 lds r21, 0x0206
1e44: 80 91 b5 01 lds r24, 0x01B5
1e48: 90 91 b6 01 lds r25, 0x01B6
1e4c: aa 27 eor r26, r26
1e4e: 97 fd sbrc r25, 7
1e50: a0 95 com r26
1e52: ba 2f mov r27, r26
1e54: 28 0f add r18, r24
1e56: 39 1f adc r19, r25
1e58: 4a 1f adc r20, r26
1e5a: 5b 1f adc r21, r27
1e5c: 20 93 03 02 sts 0x0203, r18
1e60: 30 93 04 02 sts 0x0204, r19
1e64: 40 93 05 02 sts 0x0205, r20
1e68: 50 93 06 02 sts 0x0206, r21
1e6c: e0 90 03 02 lds r14, 0x0203
1e70: f0 90 04 02 lds r15, 0x0204
1e74: 00 91 05 02 lds r16, 0x0205
1e78: 10 91 06 02 lds r17, 0x0206
1e7c: 60 91 03 02 lds r22, 0x0203
1e80: 70 91 04 02 lds r23, 0x0204
1e84: 80 91 05 02 lds r24, 0x0205
1e88: 90 91 06 02 lds r25, 0x0206
1e8c: 20 e0 ldi r18, 0x00 ; 0
1e8e: 34 e0 ldi r19, 0x04 ; 4
1e90: 40 e0 ldi r20, 0x00 ; 0
1e92: 50 e0 ldi r21, 0x00 ; 0
1e94: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
1e98: e2 1a sub r14, r18
1e9a: f3 0a sbc r15, r19
1e9c: 04 0b sbc r16, r20
1e9e: 15 0b sbc r17, r21
1ea0: e0 92 03 02 sts 0x0203, r14
1ea4: f0 92 04 02 sts 0x0204, r15
1ea8: 00 93 05 02 sts 0x0205, r16
1eac: 10 93 06 02 sts 0x0206, r17
1eb0: 83 e0 ldi r24, 0x03 ; 3
1eb2: 80 93 c2 01 sts 0x01C2, r24
1eb6: 87 e0 ldi r24, 0x07 ; 7
1eb8: 80 93 c1 01 sts 0x01C1, r24
1ebc: 7c c0 rjmp .+248 ; 0x1fb6 <__vector_24+0x5f0>
1ebe: 80 91 8b 04 lds r24, 0x048B
1ec2: 90 91 8c 04 lds r25, 0x048C
1ec6: 20 91 78 00 lds r18, 0x0078
1eca: 30 91 79 00 lds r19, 0x0079
1ece: 82 0f add r24, r18
1ed0: 93 1f adc r25, r19
1ed2: 90 93 8c 04 sts 0x048C, r25
1ed6: 80 93 8b 04 sts 0x048B, r24
1eda: 80 91 83 04 lds r24, 0x0483
1ede: 8f 5f subi r24, 0xFF ; 255
1ee0: 80 93 83 04 sts 0x0483, r24
1ee4: 80 91 83 04 lds r24, 0x0483
1ee8: 85 30 cpi r24, 0x05 ; 5
1eea: 08 f4 brcc .+2 ; 0x1eee <__vector_24+0x528>
1eec: 60 c0 rjmp .+192 ; 0x1fae <__vector_24+0x5e8>
1eee: 80 91 78 00 lds r24, 0x0078
1ef2: 90 91 79 00 lds r25, 0x0079
1ef6: 90 93 0b 01 sts 0x010B, r25
1efa: 80 93 0a 01 sts 0x010A, r24
1efe: 10 92 83 04 sts 0x0483, r1
1f02: 80 91 7f 04 lds r24, 0x047F
1f06: 90 91 80 04 lds r25, 0x0480
1f0a: 20 91 8b 04 lds r18, 0x048B
1f0e: 30 91 8c 04 lds r19, 0x048C
1f12: 82 1b sub r24, r18
1f14: 93 0b sbc r25, r19
1f16: 20 91 20 02 lds r18, 0x0220
1f1a: 30 91 21 02 lds r19, 0x0221
1f1e: 82 1b sub r24, r18
1f20: 93 0b sbc r25, r19
1f22: 90 93 be 01 sts 0x01BE, r25
1f26: 80 93 bd 01 sts 0x01BD, r24
1f2a: 60 91 8b 04 lds r22, 0x048B
1f2e: 70 91 8c 04 lds r23, 0x048C
1f32: e0 90 06 01 lds r14, 0x0106
1f36: f0 90 07 01 lds r15, 0x0107
1f3a: 00 91 08 01 lds r16, 0x0108
1f3e: 10 91 09 01 lds r17, 0x0109
1f42: 88 27 eor r24, r24
1f44: 77 fd sbrc r23, 7
1f46: 80 95 com r24
1f48: 98 2f mov r25, r24
1f4a: a8 01 movw r20, r16
1f4c: 97 01 movw r18, r14
1f4e: 22 0f add r18, r18
1f50: 33 1f adc r19, r19
1f52: 44 1f adc r20, r20
1f54: 55 1f adc r21, r21
1f56: 2e 0d add r18, r14
1f58: 3f 1d adc r19, r15
1f5a: 40 1f adc r20, r16
1f5c: 51 1f adc r21, r17
1f5e: 62 0f add r22, r18
1f60: 73 1f adc r23, r19
1f62: 84 1f adc r24, r20
1f64: 95 1f adc r25, r21
1f66: 24 e0 ldi r18, 0x04 ; 4
1f68: 30 e0 ldi r19, 0x00 ; 0
1f6a: 40 e0 ldi r20, 0x00 ; 0
1f6c: 50 e0 ldi r21, 0x00 ; 0
1f6e: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
1f72: 20 93 06 01 sts 0x0106, r18
1f76: 30 93 07 01 sts 0x0107, r19
1f7a: 40 93 08 01 sts 0x0108, r20
1f7e: 50 93 09 01 sts 0x0109, r21
1f82: 20 91 7f 04 lds r18, 0x047F
1f86: 30 91 80 04 lds r19, 0x0480
1f8a: 80 91 06 01 lds r24, 0x0106
1f8e: 90 91 07 01 lds r25, 0x0107
1f92: a0 91 08 01 lds r26, 0x0108
1f96: b0 91 09 01 lds r27, 0x0109
1f9a: 28 1b sub r18, r24
1f9c: 39 0b sbc r19, r25
1f9e: 30 93 21 02 sts 0x0221, r19
1fa2: 20 93 20 02 sts 0x0220, r18
1fa6: 10 92 8c 04 sts 0x048C, r1
1faa: 10 92 8b 04 sts 0x048B, r1
1fae: 10 92 c2 01 sts 0x01C2, r1
1fb2: 10 92 c1 01 sts 0x01C1, r1
1fb6: 80 91 c2 01 lds r24, 0x01C2
1fba: 80 93 7c 00 sts 0x007C, r24
1fbe: 8f ec ldi r24, 0xCF ; 207
1fc0: 80 93 7a 00 sts 0x007A, r24
1fc4: ff 91 pop r31
1fc6: ef 91 pop r30
1fc8: df 91 pop r29
1fca: cf 91 pop r28
1fcc: bf 91 pop r27
1fce: af 91 pop r26
1fd0: 9f 91 pop r25
1fd2: 8f 91 pop r24
1fd4: 7f 91 pop r23
1fd6: 6f 91 pop r22
1fd8: 5f 91 pop r21
1fda: 4f 91 pop r20
1fdc: 3f 91 pop r19
1fde: 2f 91 pop r18
1fe0: 1f 91 pop r17
1fe2: 0f 91 pop r16
1fe4: ff 90 pop r15
1fe6: ef 90 pop r14
1fe8: 0f 90 pop r0
1fea: 0f be out 0x3f, r0 ; 63
1fec: 0f 90 pop r0
1fee: 1f 90 pop r1
1ff0: 18 95 reti
 
00001ff2 <SucheLuftruckOffset>:
1ff2: cf 93 push r28
1ff4: df 93 push r29
1ff6: a3 e0 ldi r26, 0x03 ; 3
1ff8: b0 e0 ldi r27, 0x00 ; 0
1ffa: 0e 94 a3 2e call 0x5d46 ; 0x5d46 <__eeprom_read_byte_1F2021>
1ffe: 80 2d mov r24, r0
2000: c8 2f mov r28, r24
2002: dd 27 eor r29, r29
2004: c5 31 cpi r28, 0x15 ; 21
2006: d1 05 cpc r29, r1
2008: 08 f0 brcs .+2 ; 0x200c <SucheLuftruckOffset+0x1a>
200a: 2a 97 sbiw r28, 0x0a ; 10
200c: c7 bd out 0x27, r28 ; 39
200e: 84 e6 ldi r24, 0x64 ; 100
2010: 90 e0 ldi r25, 0x00 ; 0
2012: 0e 94 cb 0c call 0x1996 ; 0x1996 <Delay_ms>
2016: 80 91 0a 01 lds r24, 0x010A
201a: 90 91 0b 01 lds r25, 0x010B
201e: 82 55 subi r24, 0x52 ; 82
2020: 93 40 sbci r25, 0x03 ; 3
2022: d0 f4 brcc .+52 ; 0x2058 <SucheLuftruckOffset+0x66>
2024: c0 e0 ldi r28, 0x00 ; 0
2026: d0 e0 ldi r29, 0x00 ; 0
2028: 17 c0 rjmp .+46 ; 0x2058 <SucheLuftruckOffset+0x66>
202a: c7 bd out 0x27, r28 ; 39
202c: 82 e3 ldi r24, 0x32 ; 50
202e: 90 e0 ldi r25, 0x00 ; 0
2030: 0e 94 cb 0c call 0x1996 ; 0x1996 <Delay_ms>
2034: 8b eb ldi r24, 0xBB ; 187
2036: 91 e0 ldi r25, 0x01 ; 1
2038: 9f 93 push r25
203a: 8f 93 push r24
203c: 1f 92 push r1
203e: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2042: 80 91 0a 01 lds r24, 0x010A
2046: 90 91 0b 01 lds r25, 0x010B
204a: 0f 90 pop r0
204c: 0f 90 pop r0
204e: 0f 90 pop r0
2050: 84 58 subi r24, 0x84 ; 132
2052: 93 40 sbci r25, 0x03 ; 3
2054: 20 f0 brcs .+8 ; 0x205e <SucheLuftruckOffset+0x6c>
2056: 21 96 adiw r28, 0x01 ; 1
2058: ca 3f cpi r28, 0xFA ; 250
205a: d1 05 cpc r29, r1
205c: 30 f3 brcs .-52 ; 0x202a <SucheLuftruckOffset+0x38>
205e: a3 e0 ldi r26, 0x03 ; 3
2060: b0 e0 ldi r27, 0x00 ; 0
2062: 0c 2e mov r0, r28
2064: 0e 94 b0 2e call 0x5d60 ; 0x5d60 <__eeprom_write_byte_1F2021>
2068: c0 93 88 04 sts 0x0488, r28
206c: 88 ec ldi r24, 0xC8 ; 200
206e: 90 e0 ldi r25, 0x00 ; 0
2070: 0e 94 cb 0c call 0x1996 ; 0x1996 <Delay_ms>
2074: df 91 pop r29
2076: cf 91 pop r28
2078: 08 95 ret
 
0000207a <LcdClear>:
207a: e6 e1 ldi r30, 0x16 ; 22
207c: f1 e0 ldi r31, 0x01 ; 1
207e: 80 e2 ldi r24, 0x20 ; 32
2080: 81 93 st Z+, r24
2082: 91 e0 ldi r25, 0x01 ; 1
2084: e6 36 cpi r30, 0x66 ; 102
2086: f9 07 cpc r31, r25
2088: d9 f7 brne .-10 ; 0x2080 <LcdClear+0x6>
208a: 08 95 ret
 
0000208c <Menu>:
208c: ff 92 push r15
208e: 0f 93 push r16
2090: 1f 93 push r17
2092: 80 91 c6 01 lds r24, 0x01C6
2096: 28 2f mov r18, r24
2098: 33 27 eor r19, r19
209a: c9 01 movw r24, r18
209c: 81 70 andi r24, 0x01 ; 1
209e: 90 70 andi r25, 0x00 ; 0
20a0: 68 2f mov r22, r24
20a2: 88 23 and r24, r24
20a4: 91 f0 breq .+36 ; 0x20ca <Menu+0x3e>
20a6: 80 91 c7 01 lds r24, 0x01C7
20aa: 88 23 and r24, r24
20ac: 11 f0 breq .+4 ; 0x20b2 <Menu+0x26>
20ae: 81 50 subi r24, 0x01 ; 1
20b0: 02 c0 rjmp .+4 ; 0x20b6 <Menu+0x2a>
20b2: 80 91 66 01 lds r24, 0x0166
20b6: 80 93 c7 01 sts 0x01C7, r24
20ba: e6 e1 ldi r30, 0x16 ; 22
20bc: f1 e0 ldi r31, 0x01 ; 1
20be: 80 e2 ldi r24, 0x20 ; 32
20c0: 81 93 st Z+, r24
20c2: 91 e0 ldi r25, 0x01 ; 1
20c4: e6 36 cpi r30, 0x66 ; 102
20c6: f9 07 cpc r31, r25
20c8: d9 f7 brne .-10 ; 0x20c0 <Menu+0x34>
20ca: a9 01 movw r20, r18
20cc: 42 70 andi r20, 0x02 ; 2
20ce: 50 70 andi r21, 0x00 ; 0
20d0: 21 ff sbrs r18, 1
20d2: 0d c0 rjmp .+26 ; 0x20ee <Menu+0x62>
20d4: 80 91 c7 01 lds r24, 0x01C7
20d8: 8f 5f subi r24, 0xFF ; 255
20da: 80 93 c7 01 sts 0x01C7, r24
20de: e6 e1 ldi r30, 0x16 ; 22
20e0: f1 e0 ldi r31, 0x01 ; 1
20e2: 80 e2 ldi r24, 0x20 ; 32
20e4: 81 93 st Z+, r24
20e6: 91 e0 ldi r25, 0x01 ; 1
20e8: e6 36 cpi r30, 0x66 ; 102
20ea: f9 07 cpc r31, r25
20ec: d9 f7 brne .-10 ; 0x20e4 <Menu+0x58>
20ee: 66 23 and r22, r22
20f0: 21 f0 breq .+8 ; 0x20fa <Menu+0x6e>
20f2: 45 2b or r20, r21
20f4: 11 f0 breq .+4 ; 0x20fa <Menu+0x6e>
20f6: 10 92 c7 01 sts 0x01C7, r1
20fa: 81 e1 ldi r24, 0x11 ; 17
20fc: 80 93 c5 01 sts 0x01C5, r24
2100: 80 91 c7 01 lds r24, 0x01C7
2104: 99 27 eor r25, r25
2106: 9f 93 push r25
2108: 8f 93 push r24
210a: 85 e9 ldi r24, 0x95 ; 149
210c: 94 e0 ldi r25, 0x04 ; 4
210e: 9f 93 push r25
2110: 8f 93 push r24
2112: 81 e0 ldi r24, 0x01 ; 1
2114: 8f 93 push r24
2116: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
211a: 80 91 c7 01 lds r24, 0x01C7
211e: 0f 90 pop r0
2120: 0f 90 pop r0
2122: 0f 90 pop r0
2124: 0f 90 pop r0
2126: 0f 90 pop r0
2128: e8 2f mov r30, r24
212a: ff 27 eor r31, r31
212c: ed 30 cpi r30, 0x0D ; 13
212e: f1 05 cpc r31, r1
2130: 08 f0 brcs .+2 ; 0x2134 <Menu+0xa8>
2132: bc c3 rjmp .+1912 ; 0x28ac <Menu+0x820>
2134: ec 5a subi r30, 0xAC ; 172
2136: ff 4f sbci r31, 0xFF ; 255
2138: 0c 94 9d 2e jmp 0x5d3a ; 0x5d3a <__tablejump2__>
213c: 10 92 c5 01 sts 0x01C5, r1
2140: 83 e8 ldi r24, 0x83 ; 131
2142: 94 e0 ldi r25, 0x04 ; 4
2144: 9f 93 push r25
2146: 8f 93 push r24
2148: 11 e0 ldi r17, 0x01 ; 1
214a: 1f 93 push r17
214c: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2150: 84 e1 ldi r24, 0x14 ; 20
2152: 80 93 c5 01 sts 0x01C5, r24
2156: 8c e3 ldi r24, 0x3C ; 60
2158: 90 e0 ldi r25, 0x00 ; 0
215a: 9f 93 push r25
215c: 8f 93 push r24
215e: 1f 92 push r1
2160: 1f 92 push r1
2162: 8c e7 ldi r24, 0x7C ; 124
2164: 94 e0 ldi r25, 0x04 ; 4
2166: 9f 93 push r25
2168: 8f 93 push r24
216a: 1f 93 push r17
216c: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2170: 88 e2 ldi r24, 0x28 ; 40
2172: 80 93 c5 01 sts 0x01C5, r24
2176: 0e 94 a9 03 call 0x752 ; 0x752 <GetActiveParamSetNumber>
217a: 99 27 eor r25, r25
217c: 9f 93 push r25
217e: 8f 93 push r24
2180: 8f e6 ldi r24, 0x6F ; 111
2182: 94 e0 ldi r25, 0x04 ; 4
2184: 9f 93 push r25
2186: 8f 93 push r24
2188: 1f 93 push r17
218a: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
218e: 8c e3 ldi r24, 0x3C ; 60
2190: 80 93 c5 01 sts 0x01C5, r24
2194: 8f e5 ldi r24, 0x5F ; 95
2196: 94 e0 ldi r25, 0x04 ; 4
2198: 9f 93 push r25
219a: 8f 93 push r24
219c: 1f 93 push r17
219e: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
21a2: 80 c3 rjmp .+1792 ; 0x28a4 <Menu+0x818>
21a4: 80 91 dc 04 lds r24, 0x04DC
21a8: 80 ff sbrs r24, 0
21aa: 44 c0 rjmp .+136 ; 0x2234 <Menu+0x1a8>
21ac: 10 92 c5 01 sts 0x01C5, r1
21b0: 80 91 20 02 lds r24, 0x0220
21b4: 90 91 21 02 lds r25, 0x0221
21b8: 9f 93 push r25
21ba: 8f 93 push r24
21bc: 80 e5 ldi r24, 0x50 ; 80
21be: 94 e0 ldi r25, 0x04 ; 4
21c0: 9f 93 push r25
21c2: 8f 93 push r24
21c4: 11 e0 ldi r17, 0x01 ; 1
21c6: 1f 93 push r17
21c8: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
21cc: 84 e1 ldi r24, 0x14 ; 20
21ce: 80 93 c5 01 sts 0x01C5, r24
21d2: 80 91 22 02 lds r24, 0x0222
21d6: 90 91 23 02 lds r25, 0x0223
21da: 9f 93 push r25
21dc: 8f 93 push r24
21de: 81 e4 ldi r24, 0x41 ; 65
21e0: 94 e0 ldi r25, 0x04 ; 4
21e2: 9f 93 push r25
21e4: 8f 93 push r24
21e6: 1f 93 push r17
21e8: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
21ec: 88 e2 ldi r24, 0x28 ; 40
21ee: 80 93 c5 01 sts 0x01C5, r24
21f2: 80 91 0a 01 lds r24, 0x010A
21f6: 90 91 0b 01 lds r25, 0x010B
21fa: 9f 93 push r25
21fc: 8f 93 push r24
21fe: 82 e3 ldi r24, 0x32 ; 50
2200: 94 e0 ldi r25, 0x04 ; 4
2202: 9f 93 push r25
2204: 8f 93 push r24
2206: 1f 93 push r17
2208: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
220c: 8c e3 ldi r24, 0x3C ; 60
220e: 80 93 c5 01 sts 0x01C5, r24
2212: 80 91 88 04 lds r24, 0x0488
2216: 99 27 eor r25, r25
2218: 9f 93 push r25
221a: 8f 93 push r24
221c: 83 e2 ldi r24, 0x23 ; 35
221e: 94 e0 ldi r25, 0x04 ; 4
2220: 9f 93 push r25
2222: 8f 93 push r24
2224: 1f 93 push r17
2226: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
222a: 8d b7 in r24, 0x3d ; 61
222c: 9e b7 in r25, 0x3e ; 62
222e: 44 96 adiw r24, 0x14 ; 20
2230: 8d bf out 0x3d, r24 ; 61
2232: 41 c3 rjmp .+1666 ; 0x28b6 <Menu+0x82a>
2234: 84 e1 ldi r24, 0x14 ; 20
2236: 80 93 c5 01 sts 0x01C5, r24
223a: 8c e1 ldi r24, 0x1C ; 28
223c: 94 e0 ldi r25, 0x04 ; 4
223e: 9f 93 push r25
2240: 8f 93 push r24
2242: 11 e0 ldi r17, 0x01 ; 1
2244: 1f 93 push r17
2246: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
224a: 88 e2 ldi r24, 0x28 ; 40
224c: 80 93 c5 01 sts 0x01C5, r24
2250: 8e e0 ldi r24, 0x0E ; 14
2252: 94 e0 ldi r25, 0x04 ; 4
2254: 9f 93 push r25
2256: 8f 93 push r24
2258: 1f 93 push r17
225a: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
225e: 8d b7 in r24, 0x3d ; 61
2260: 9e b7 in r25, 0x3e ; 62
2262: 06 96 adiw r24, 0x06 ; 6
2264: e5 cf rjmp .-54 ; 0x2230 <Menu+0x1a4>
2266: 10 92 c5 01 sts 0x01C5, r1
226a: 84 e0 ldi r24, 0x04 ; 4
226c: 94 e0 ldi r25, 0x04 ; 4
226e: 9f 93 push r25
2270: 8f 93 push r24
2272: 11 e0 ldi r17, 0x01 ; 1
2274: 1f 93 push r17
2276: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
227a: 84 e1 ldi r24, 0x14 ; 20
227c: 80 93 c5 01 sts 0x01C5, r24
2280: 60 91 d7 01 lds r22, 0x01D7
2284: 70 91 d8 01 lds r23, 0x01D8
2288: 80 91 d9 01 lds r24, 0x01D9
228c: 90 91 da 01 lds r25, 0x01DA
2290: 20 e0 ldi r18, 0x00 ; 0
2292: 34 e0 ldi r19, 0x04 ; 4
2294: 40 e0 ldi r20, 0x00 ; 0
2296: 50 e0 ldi r21, 0x00 ; 0
2298: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
229c: 5f 93 push r21
229e: 4f 93 push r20
22a0: 3f 93 push r19
22a2: 2f 93 push r18
22a4: 85 ef ldi r24, 0xF5 ; 245
22a6: 93 e0 ldi r25, 0x03 ; 3
22a8: 9f 93 push r25
22aa: 8f 93 push r24
22ac: 1f 93 push r17
22ae: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
22b2: 88 e2 ldi r24, 0x28 ; 40
22b4: 80 93 c5 01 sts 0x01C5, r24
22b8: 60 91 df 01 lds r22, 0x01DF
22bc: 70 91 e0 01 lds r23, 0x01E0
22c0: 80 91 e1 01 lds r24, 0x01E1
22c4: 90 91 e2 01 lds r25, 0x01E2
22c8: 20 e0 ldi r18, 0x00 ; 0
22ca: 34 e0 ldi r19, 0x04 ; 4
22cc: 40 e0 ldi r20, 0x00 ; 0
22ce: 50 e0 ldi r21, 0x00 ; 0
22d0: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
22d4: 5f 93 push r21
22d6: 4f 93 push r20
22d8: 3f 93 push r19
22da: 2f 93 push r18
22dc: 86 ee ldi r24, 0xE6 ; 230
22de: 93 e0 ldi r25, 0x03 ; 3
22e0: 9f 93 push r25
22e2: 8f 93 push r24
22e4: 1f 93 push r17
22e6: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
22ea: 8c e3 ldi r24, 0x3C ; 60
22ec: 80 93 c5 01 sts 0x01C5, r24
22f0: 80 91 07 02 lds r24, 0x0207
22f4: 90 91 08 02 lds r25, 0x0208
22f8: 9f 93 push r25
22fa: 8f 93 push r24
22fc: 87 ed ldi r24, 0xD7 ; 215
22fe: 93 e0 ldi r25, 0x03 ; 3
2300: 9f 93 push r25
2302: 8f 93 push r24
2304: 1f 93 push r17
2306: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
230a: 8d b7 in r24, 0x3d ; 61
230c: 9e b7 in r25, 0x3e ; 62
230e: 46 96 adiw r24, 0x16 ; 22
2310: 8f cf rjmp .-226 ; 0x2230 <Menu+0x1a4>
2312: 10 92 c5 01 sts 0x01C5, r1
2316: 80 91 ac 04 lds r24, 0x04AC
231a: 90 91 ad 04 lds r25, 0x04AD
231e: 20 91 aa 04 lds r18, 0x04AA
2322: 30 91 ab 04 lds r19, 0x04AB
2326: 9f 93 push r25
2328: 8f 93 push r24
232a: 3f 93 push r19
232c: 2f 93 push r18
232e: 87 ec ldi r24, 0xC7 ; 199
2330: 93 e0 ldi r25, 0x03 ; 3
2332: 9f 93 push r25
2334: 8f 93 push r24
2336: 11 e0 ldi r17, 0x01 ; 1
2338: 1f 93 push r17
233a: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
233e: 84 e1 ldi r24, 0x14 ; 20
2340: 80 93 c5 01 sts 0x01C5, r24
2344: 80 91 b0 04 lds r24, 0x04B0
2348: 90 91 b1 04 lds r25, 0x04B1
234c: 20 91 ae 04 lds r18, 0x04AE
2350: 30 91 af 04 lds r19, 0x04AF
2354: 9f 93 push r25
2356: 8f 93 push r24
2358: 3f 93 push r19
235a: 2f 93 push r18
235c: 87 eb ldi r24, 0xB7 ; 183
235e: 93 e0 ldi r25, 0x03 ; 3
2360: 9f 93 push r25
2362: 8f 93 push r24
2364: 1f 93 push r17
2366: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
236a: 88 e2 ldi r24, 0x28 ; 40
236c: 80 93 c5 01 sts 0x01C5, r24
2370: 80 91 b4 04 lds r24, 0x04B4
2374: 90 91 b5 04 lds r25, 0x04B5
2378: 20 91 b2 04 lds r18, 0x04B2
237c: 30 91 b3 04 lds r19, 0x04B3
2380: 9f 93 push r25
2382: 8f 93 push r24
2384: 3f 93 push r19
2386: 2f 93 push r18
2388: 87 ea ldi r24, 0xA7 ; 167
238a: 93 e0 ldi r25, 0x03 ; 3
238c: 9f 93 push r25
238e: 8f 93 push r24
2390: 1f 93 push r17
2392: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2396: 8c e3 ldi r24, 0x3C ; 60
2398: 80 93 c5 01 sts 0x01C5, r24
239c: 80 91 b6 04 lds r24, 0x04B6
23a0: 90 91 b7 04 lds r25, 0x04B7
23a4: 9f 93 push r25
23a6: 8f 93 push r24
23a8: 87 e9 ldi r24, 0x97 ; 151
23aa: 93 e0 ldi r25, 0x03 ; 3
23ac: 70 c0 rjmp .+224 ; 0x248e <Menu+0x402>
23ae: 10 92 c5 01 sts 0x01C5, r1
23b2: e0 91 d5 04 lds r30, 0x04D5
23b6: ff 27 eor r31, r31
23b8: ee 0f add r30, r30
23ba: ff 1f adc r31, r31
23bc: e8 55 subi r30, 0x58 ; 88
23be: fb 4f sbci r31, 0xFB ; 251
23c0: 20 81 ld r18, Z
23c2: 31 81 ldd r19, Z+1 ; 0x01
23c4: e0 91 d4 04 lds r30, 0x04D4
23c8: ff 27 eor r31, r31
23ca: ee 0f add r30, r30
23cc: ff 1f adc r31, r31
23ce: e8 55 subi r30, 0x58 ; 88
23d0: fb 4f sbci r31, 0xFB ; 251
23d2: 80 81 ld r24, Z
23d4: 91 81 ldd r25, Z+1 ; 0x01
23d6: 3f 93 push r19
23d8: 2f 93 push r18
23da: 9f 93 push r25
23dc: 8f 93 push r24
23de: 87 e8 ldi r24, 0x87 ; 135
23e0: 93 e0 ldi r25, 0x03 ; 3
23e2: 9f 93 push r25
23e4: 8f 93 push r24
23e6: 11 e0 ldi r17, 0x01 ; 1
23e8: 1f 93 push r17
23ea: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
23ee: 84 e1 ldi r24, 0x14 ; 20
23f0: 80 93 c5 01 sts 0x01C5, r24
23f4: e0 91 d7 04 lds r30, 0x04D7
23f8: ff 27 eor r31, r31
23fa: ee 0f add r30, r30
23fc: ff 1f adc r31, r31
23fe: e8 55 subi r30, 0x58 ; 88
2400: fb 4f sbci r31, 0xFB ; 251
2402: 20 81 ld r18, Z
2404: 31 81 ldd r19, Z+1 ; 0x01
2406: e0 91 d6 04 lds r30, 0x04D6
240a: ff 27 eor r31, r31
240c: ee 0f add r30, r30
240e: ff 1f adc r31, r31
2410: e8 55 subi r30, 0x58 ; 88
2412: fb 4f sbci r31, 0xFB ; 251
2414: 80 81 ld r24, Z
2416: 91 81 ldd r25, Z+1 ; 0x01
2418: 3f 93 push r19
241a: 2f 93 push r18
241c: 9f 93 push r25
241e: 8f 93 push r24
2420: 87 e7 ldi r24, 0x77 ; 119
2422: 93 e0 ldi r25, 0x03 ; 3
2424: 9f 93 push r25
2426: 8f 93 push r24
2428: 1f 93 push r17
242a: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
242e: 88 e2 ldi r24, 0x28 ; 40
2430: 80 93 c5 01 sts 0x01C5, r24
2434: e0 91 d9 04 lds r30, 0x04D9
2438: ff 27 eor r31, r31
243a: ee 0f add r30, r30
243c: ff 1f adc r31, r31
243e: e8 55 subi r30, 0x58 ; 88
2440: fb 4f sbci r31, 0xFB ; 251
2442: 20 81 ld r18, Z
2444: 31 81 ldd r19, Z+1 ; 0x01
2446: e0 91 d8 04 lds r30, 0x04D8
244a: ff 27 eor r31, r31
244c: ee 0f add r30, r30
244e: ff 1f adc r31, r31
2450: e8 55 subi r30, 0x58 ; 88
2452: fb 4f sbci r31, 0xFB ; 251
2454: 80 81 ld r24, Z
2456: 91 81 ldd r25, Z+1 ; 0x01
2458: 3f 93 push r19
245a: 2f 93 push r18
245c: 9f 93 push r25
245e: 8f 93 push r24
2460: 87 e6 ldi r24, 0x67 ; 103
2462: 93 e0 ldi r25, 0x03 ; 3
2464: 9f 93 push r25
2466: 8f 93 push r24
2468: 1f 93 push r17
246a: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
246e: 8c e3 ldi r24, 0x3C ; 60
2470: 80 93 c5 01 sts 0x01C5, r24
2474: e0 91 da 04 lds r30, 0x04DA
2478: ff 27 eor r31, r31
247a: ee 0f add r30, r30
247c: ff 1f adc r31, r31
247e: e8 55 subi r30, 0x58 ; 88
2480: fb 4f sbci r31, 0xFB ; 251
2482: 80 81 ld r24, Z
2484: 91 81 ldd r25, Z+1 ; 0x01
2486: 9f 93 push r25
2488: 8f 93 push r24
248a: 87 e5 ldi r24, 0x57 ; 87
248c: 93 e0 ldi r25, 0x03 ; 3
248e: 9f 93 push r25
2490: 8f 93 push r24
2492: 1f 93 push r17
2494: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2498: 8d b7 in r24, 0x3d ; 61
249a: 9e b7 in r25, 0x3e ; 62
249c: 4a 96 adiw r24, 0x1a ; 26
249e: c8 ce rjmp .-624 ; 0x2230 <Menu+0x1a4>
24a0: 10 92 c5 01 sts 0x01C5, r1
24a4: 89 e4 ldi r24, 0x49 ; 73
24a6: 93 e0 ldi r25, 0x03 ; 3
24a8: 9f 93 push r25
24aa: 8f 93 push r24
24ac: 11 e0 ldi r17, 0x01 ; 1
24ae: 1f 93 push r17
24b0: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
24b4: 84 e1 ldi r24, 0x14 ; 20
24b6: 80 93 c5 01 sts 0x01C5, r24
24ba: 20 91 d1 01 lds r18, 0x01D1
24be: 30 91 d2 01 lds r19, 0x01D2
24c2: 80 91 ab 01 lds r24, 0x01AB
24c6: 90 91 ac 01 lds r25, 0x01AC
24ca: 60 91 b7 01 lds r22, 0x01B7
24ce: 3f 93 push r19
24d0: 2f 93 push r18
24d2: 77 27 eor r23, r23
24d4: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
24d8: 7f 93 push r23
24da: 6f 93 push r22
24dc: 8a e3 ldi r24, 0x3A ; 58
24de: 93 e0 ldi r25, 0x03 ; 3
24e0: 9f 93 push r25
24e2: 8f 93 push r24
24e4: 1f 93 push r17
24e6: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
24ea: 88 e2 ldi r24, 0x28 ; 40
24ec: 80 93 c5 01 sts 0x01C5, r24
24f0: 20 91 d3 01 lds r18, 0x01D3
24f4: 30 91 d4 01 lds r19, 0x01D4
24f8: 80 91 ad 01 lds r24, 0x01AD
24fc: 90 91 ae 01 lds r25, 0x01AE
2500: 60 91 b8 01 lds r22, 0x01B8
2504: 3f 93 push r19
2506: 2f 93 push r18
2508: 77 27 eor r23, r23
250a: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
250e: 7f 93 push r23
2510: 6f 93 push r22
2512: 8b e2 ldi r24, 0x2B ; 43
2514: 93 e0 ldi r25, 0x03 ; 3
2516: 9f 93 push r25
2518: 8f 93 push r24
251a: 1f 93 push r17
251c: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2520: 8c e3 ldi r24, 0x3C ; 60
2522: 80 93 c5 01 sts 0x01C5, r24
2526: 20 91 d5 01 lds r18, 0x01D5
252a: 30 91 d6 01 lds r19, 0x01D6
252e: 80 91 af 01 lds r24, 0x01AF
2532: 90 91 b0 01 lds r25, 0x01B0
2536: 60 91 b9 01 lds r22, 0x01B9
253a: 3f 93 push r19
253c: 2f 93 push r18
253e: 77 27 eor r23, r23
2540: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
2544: 7f 93 push r23
2546: 6f 93 push r22
2548: 8c e1 ldi r24, 0x1C ; 28
254a: 93 e0 ldi r25, 0x03 ; 3
254c: 9f 93 push r25
254e: 8f 93 push r24
2550: 1f 93 push r17
2552: 5b c0 rjmp .+182 ; 0x260a <Menu+0x57e>
2554: 10 92 c5 01 sts 0x01C5, r1
2558: 8f e0 ldi r24, 0x0F ; 15
255a: 93 e0 ldi r25, 0x03 ; 3
255c: 9f 93 push r25
255e: 8f 93 push r24
2560: 81 e0 ldi r24, 0x01 ; 1
2562: f8 2e mov r15, r24
2564: ff 92 push r15
2566: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
256a: 84 e1 ldi r24, 0x14 ; 20
256c: 80 93 c5 01 sts 0x01C5, r24
2570: 20 91 19 05 lds r18, 0x0519
2574: 30 91 1a 05 lds r19, 0x051A
2578: 80 91 b3 01 lds r24, 0x01B3
257c: 90 91 b4 01 lds r25, 0x01B4
2580: 60 91 ba 01 lds r22, 0x01BA
2584: 3f 93 push r19
2586: 2f 93 push r18
2588: 77 27 eor r23, r23
258a: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
258e: 7f 93 push r23
2590: 6f 93 push r22
2592: 80 e0 ldi r24, 0x00 ; 0
2594: 93 e0 ldi r25, 0x03 ; 3
2596: 9f 93 push r25
2598: 8f 93 push r24
259a: ff 92 push r15
259c: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
25a0: 88 e2 ldi r24, 0x28 ; 40
25a2: 80 93 c5 01 sts 0x01C5, r24
25a6: 20 91 1b 05 lds r18, 0x051B
25aa: 30 91 1c 05 lds r19, 0x051C
25ae: 80 91 b1 01 lds r24, 0x01B1
25b2: 90 91 b2 01 lds r25, 0x01B2
25b6: 60 91 bb 01 lds r22, 0x01BB
25ba: 3f 93 push r19
25bc: 2f 93 push r18
25be: 77 27 eor r23, r23
25c0: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
25c4: 7f 93 push r23
25c6: 6f 93 push r22
25c8: 81 ef ldi r24, 0xF1 ; 241
25ca: 92 e0 ldi r25, 0x02 ; 2
25cc: 9f 93 push r25
25ce: 8f 93 push r24
25d0: ff 92 push r15
25d2: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
25d6: 8c e3 ldi r24, 0x3C ; 60
25d8: 80 93 c5 01 sts 0x01C5, r24
25dc: 60 91 1d 05 lds r22, 0x051D
25e0: 70 91 1e 05 lds r23, 0x051E
25e4: 80 91 1f 05 lds r24, 0x051F
25e8: 90 91 20 05 lds r25, 0x0520
25ec: 00 91 7d 04 lds r16, 0x047D
25f0: 10 91 7e 04 lds r17, 0x047E
25f4: 0e 94 04 2d call 0x5a08 ; 0x5a08 <__fixsfsi>
25f8: 7f 93 push r23
25fa: 6f 93 push r22
25fc: 1f 93 push r17
25fe: 0f 93 push r16
2600: 82 ee ldi r24, 0xE2 ; 226
2602: 92 e0 ldi r25, 0x02 ; 2
2604: 9f 93 push r25
2606: 8f 93 push r24
2608: ff 92 push r15
260a: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
260e: 8d b7 in r24, 0x3d ; 61
2610: 9e b7 in r25, 0x3e ; 62
2612: 48 96 adiw r24, 0x18 ; 24
2614: 0d ce rjmp .-998 ; 0x2230 <Menu+0x1a4>
2616: 84 e1 ldi r24, 0x14 ; 20
2618: 80 93 c5 01 sts 0x01C5, r24
261c: 80 91 04 01 lds r24, 0x0104
2620: 90 91 05 01 lds r25, 0x0105
2624: 9f 93 push r25
2626: 8f 93 push r24
2628: 83 ed ldi r24, 0xD3 ; 211
262a: 92 e0 ldi r25, 0x02 ; 2
262c: 9f 93 push r25
262e: 8f 93 push r24
2630: 11 e0 ldi r17, 0x01 ; 1
2632: 1f 93 push r17
2634: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2638: 88 e2 ldi r24, 0x28 ; 40
263a: 80 93 c5 01 sts 0x01C5, r24
263e: 80 91 18 02 lds r24, 0x0218
2642: 99 27 eor r25, r25
2644: 9f 93 push r25
2646: 8f 93 push r24
2648: 84 ec ldi r24, 0xC4 ; 196
264a: 92 e0 ldi r25, 0x02 ; 2
264c: 9f 93 push r25
264e: 8f 93 push r24
2650: 1f 93 push r17
2652: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2656: 8d b7 in r24, 0x3d ; 61
2658: 9e b7 in r25, 0x3e ; 62
265a: 0a 96 adiw r24, 0x0a ; 10
265c: e9 cd rjmp .-1070 ; 0x2230 <Menu+0x1a4>
265e: 10 92 c5 01 sts 0x01C5, r1
2662: 85 eb ldi r24, 0xB5 ; 181
2664: 92 e0 ldi r25, 0x02 ; 2
2666: 9f 93 push r25
2668: 8f 93 push r24
266a: 11 e0 ldi r17, 0x01 ; 1
266c: 1f 93 push r17
266e: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2672: 84 e1 ldi r24, 0x14 ; 20
2674: 80 93 c5 01 sts 0x01C5, r24
2678: 80 91 0b 02 lds r24, 0x020B
267c: 90 91 0c 02 lds r25, 0x020C
2680: 9f 93 push r25
2682: 8f 93 push r24
2684: 86 ea ldi r24, 0xA6 ; 166
2686: 92 e0 ldi r25, 0x02 ; 2
2688: 9f 93 push r25
268a: 8f 93 push r24
268c: 1f 93 push r17
268e: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2692: 88 e2 ldi r24, 0x28 ; 40
2694: 80 93 c5 01 sts 0x01C5, r24
2698: 80 91 07 02 lds r24, 0x0207
269c: 90 91 08 02 lds r25, 0x0208
26a0: 9f 93 push r25
26a2: 8f 93 push r24
26a4: 87 e9 ldi r24, 0x97 ; 151
26a6: 92 e0 ldi r25, 0x02 ; 2
26a8: 9f 93 push r25
26aa: 8f 93 push r24
26ac: 1f 93 push r17
26ae: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
26b2: 8c e3 ldi r24, 0x3C ; 60
26b4: 80 93 c5 01 sts 0x01C5, r24
26b8: 80 91 09 02 lds r24, 0x0209
26bc: 90 91 0a 02 lds r25, 0x020A
26c0: 9f 93 push r25
26c2: 8f 93 push r24
26c4: 88 e8 ldi r24, 0x88 ; 136
26c6: 92 e0 ldi r25, 0x02 ; 2
26c8: e8 c0 rjmp .+464 ; 0x289a <Menu+0x80e>
26ca: 10 92 c5 01 sts 0x01C5, r1
26ce: 80 91 10 02 lds r24, 0x0210
26d2: 90 91 11 02 lds r25, 0x0211
26d6: 9f 93 push r25
26d8: 8f 93 push r24
26da: 8c e7 ldi r24, 0x7C ; 124
26dc: 92 e0 ldi r25, 0x02 ; 2
26de: 9f 93 push r25
26e0: 8f 93 push r24
26e2: 11 e0 ldi r17, 0x01 ; 1
26e4: 1f 93 push r17
26e6: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
26ea: 84 e1 ldi r24, 0x14 ; 20
26ec: 80 93 c5 01 sts 0x01C5, r24
26f0: 80 91 12 02 lds r24, 0x0212
26f4: 90 91 13 02 lds r25, 0x0213
26f8: 9f 93 push r25
26fa: 8f 93 push r24
26fc: 80 e7 ldi r24, 0x70 ; 112
26fe: 92 e0 ldi r25, 0x02 ; 2
2700: 9f 93 push r25
2702: 8f 93 push r24
2704: 1f 93 push r17
2706: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
270a: 88 e2 ldi r24, 0x28 ; 40
270c: 80 93 c5 01 sts 0x01C5, r24
2710: 80 91 14 02 lds r24, 0x0214
2714: 90 91 15 02 lds r25, 0x0215
2718: 9f 93 push r25
271a: 8f 93 push r24
271c: 84 e6 ldi r24, 0x64 ; 100
271e: 92 e0 ldi r25, 0x02 ; 2
2720: 9f 93 push r25
2722: 8f 93 push r24
2724: 1f 93 push r17
2726: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
272a: 8c e3 ldi r24, 0x3C ; 60
272c: 80 93 c5 01 sts 0x01C5, r24
2730: 80 91 16 02 lds r24, 0x0216
2734: 90 91 17 02 lds r25, 0x0217
2738: 9f 93 push r25
273a: 8f 93 push r24
273c: 88 e5 ldi r24, 0x58 ; 88
273e: 92 e0 ldi r25, 0x02 ; 2
2740: 6f cd rjmp .-1314 ; 0x2220 <Menu+0x194>
2742: 10 92 c5 01 sts 0x01C5, r1
2746: 80 e5 ldi r24, 0x50 ; 80
2748: 92 e0 ldi r25, 0x02 ; 2
274a: 9f 93 push r25
274c: 8f 93 push r24
274e: 11 e0 ldi r17, 0x01 ; 1
2750: 1f 93 push r17
2752: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2756: 84 e1 ldi r24, 0x14 ; 20
2758: 80 93 c5 01 sts 0x01C5, r24
275c: 80 91 89 01 lds r24, 0x0189
2760: 99 27 eor r25, r25
2762: 9f 93 push r25
2764: 8f 93 push r24
2766: 82 e4 ldi r24, 0x42 ; 66
2768: 92 e0 ldi r25, 0x02 ; 2
276a: 9f 93 push r25
276c: 8f 93 push r24
276e: 1f 93 push r17
2770: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2774: 88 e2 ldi r24, 0x28 ; 40
2776: 80 93 c5 01 sts 0x01C5, r24
277a: 80 91 a8 01 lds r24, 0x01A8
277e: 90 91 a9 01 lds r25, 0x01A9
2782: 9f 93 push r25
2784: 8f 93 push r24
2786: 84 e3 ldi r24, 0x34 ; 52
2788: 92 e0 ldi r25, 0x02 ; 2
278a: 9f 93 push r25
278c: 8f 93 push r24
278e: 1f 93 push r17
2790: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2794: 8c e3 ldi r24, 0x3C ; 60
2796: 80 93 c5 01 sts 0x01C5, r24
279a: 80 91 f8 04 lds r24, 0x04F8
279e: 99 27 eor r25, r25
27a0: 9f 93 push r25
27a2: 8f 93 push r24
27a4: 80 91 f7 04 lds r24, 0x04F7
27a8: 99 27 eor r25, r25
27aa: 9f 93 push r25
27ac: 8f 93 push r24
27ae: 86 e2 ldi r24, 0x26 ; 38
27b0: 92 e0 ldi r25, 0x02 ; 2
27b2: 9f 93 push r25
27b4: 8f 93 push r24
27b6: 1f 93 push r17
27b8: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
27bc: 36 cd rjmp .-1428 ; 0x222a <Menu+0x19e>
27be: 10 92 c5 01 sts 0x01C5, r1
27c2: 8e e1 ldi r24, 0x1E ; 30
27c4: 92 e0 ldi r25, 0x02 ; 2
27c6: 9f 93 push r25
27c8: 8f 93 push r24
27ca: 11 e0 ldi r17, 0x01 ; 1
27cc: 1f 93 push r17
27ce: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
27d2: 84 e1 ldi r24, 0x14 ; 20
27d4: 80 93 c5 01 sts 0x01C5, r24
27d8: 80 91 8d 04 lds r24, 0x048D
27dc: 99 27 eor r25, r25
27de: 87 fd sbrc r24, 7
27e0: 90 95 com r25
27e2: 9f 93 push r25
27e4: 8f 93 push r24
27e6: 8f e0 ldi r24, 0x0F ; 15
27e8: 92 e0 ldi r25, 0x02 ; 2
27ea: 9f 93 push r25
27ec: 8f 93 push r24
27ee: 1f 93 push r17
27f0: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
27f4: 88 e2 ldi r24, 0x28 ; 40
27f6: 80 93 c5 01 sts 0x01C5, r24
27fa: 80 91 8e 04 lds r24, 0x048E
27fe: 99 27 eor r25, r25
2800: 87 fd sbrc r24, 7
2802: 90 95 com r25
2804: 9f 93 push r25
2806: 8f 93 push r24
2808: 80 e0 ldi r24, 0x00 ; 0
280a: 92 e0 ldi r25, 0x02 ; 2
280c: 9f 93 push r25
280e: 8f 93 push r24
2810: 1f 93 push r17
2812: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2816: 8c e3 ldi r24, 0x3C ; 60
2818: 80 93 c5 01 sts 0x01C5, r24
281c: 80 91 8f 04 lds r24, 0x048F
2820: 99 27 eor r25, r25
2822: 87 fd sbrc r24, 7
2824: 90 95 com r25
2826: 9f 93 push r25
2828: 8f 93 push r24
282a: 81 ef ldi r24, 0xF1 ; 241
282c: 91 e0 ldi r25, 0x01 ; 1
282e: 35 c0 rjmp .+106 ; 0x289a <Menu+0x80e>
2830: 10 92 c5 01 sts 0x01C5, r1
2834: 87 ee ldi r24, 0xE7 ; 231
2836: 91 e0 ldi r25, 0x01 ; 1
2838: 9f 93 push r25
283a: 8f 93 push r24
283c: 11 e0 ldi r17, 0x01 ; 1
283e: 1f 93 push r17
2840: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2844: 84 e1 ldi r24, 0x14 ; 20
2846: 80 93 c5 01 sts 0x01C5, r24
284a: 80 91 90 04 lds r24, 0x0490
284e: 90 91 91 04 lds r25, 0x0491
2852: 9f 93 push r25
2854: 8f 93 push r24
2856: 89 ed ldi r24, 0xD9 ; 217
2858: 91 e0 ldi r25, 0x01 ; 1
285a: 9f 93 push r25
285c: 8f 93 push r24
285e: 1f 93 push r17
2860: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2864: 88 e2 ldi r24, 0x28 ; 40
2866: 80 93 c5 01 sts 0x01C5, r24
286a: 80 91 92 04 lds r24, 0x0492
286e: 90 91 93 04 lds r25, 0x0493
2872: 9f 93 push r25
2874: 8f 93 push r24
2876: 8b ec ldi r24, 0xCB ; 203
2878: 91 e0 ldi r25, 0x01 ; 1
287a: 9f 93 push r25
287c: 8f 93 push r24
287e: 1f 93 push r17
2880: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
2884: 8c e3 ldi r24, 0x3C ; 60
2886: 80 93 c5 01 sts 0x01C5, r24
288a: 80 91 94 04 lds r24, 0x0494
288e: 90 91 95 04 lds r25, 0x0495
2892: 9f 93 push r25
2894: 8f 93 push r24
2896: 8d eb ldi r24, 0xBD ; 189
2898: 91 e0 ldi r25, 0x01 ; 1
289a: 9f 93 push r25
289c: 8f 93 push r24
289e: 1f 93 push r17
28a0: 0e 94 1c 09 call 0x1238 ; 0x1238 <_printf_P>
28a4: 8d b7 in r24, 0x3d ; 61
28a6: 9e b7 in r25, 0x3e ; 62
28a8: 42 96 adiw r24, 0x12 ; 18
28aa: c2 cc rjmp .-1660 ; 0x2230 <Menu+0x1a4>
28ac: 81 50 subi r24, 0x01 ; 1
28ae: 80 93 66 01 sts 0x0166, r24
28b2: 10 92 c7 01 sts 0x01C7, r1
28b6: 10 92 c6 01 sts 0x01C6, r1
28ba: 1f 91 pop r17
28bc: 0f 91 pop r16
28be: ff 90 pop r15
28c0: 08 95 ret
 
000028c2 <__vector_19>:
28c2: 1f 92 push r1
28c4: 0f 92 push r0
28c6: 0f b6 in r0, 0x3f ; 63
28c8: 0f 92 push r0
28ca: 11 24 eor r1, r1
28cc: 2f 93 push r18
28ce: 3f 93 push r19
28d0: 4f 93 push r20
28d2: 8f 93 push r24
28d4: 9f 93 push r25
28d6: 80 91 96 04 lds r24, 0x0496
28da: 83 30 cpi r24, 0x03 ; 3
28dc: 19 f0 breq .+6 ; 0x28e4 <__vector_19+0x22>
28de: 84 30 cpi r24, 0x04 ; 4
28e0: a1 f5 brne .+104 ; 0x294a <__vector_19+0x88>
28e2: 08 c0 rjmp .+16 ; 0x28f4 <__vector_19+0x32>
28e4: 8e b5 in r24, 0x2e ; 46
28e6: 80 93 c8 01 sts 0x01C8, r24
28ea: 1e bc out 0x2e, r1 ; 46
28ec: 84 e0 ldi r24, 0x04 ; 4
28ee: 80 93 96 04 sts 0x0496, r24
28f2: 2b c0 rjmp .+86 ; 0x294a <__vector_19+0x88>
28f4: 80 91 c8 01 lds r24, 0x01C8
28f8: 99 27 eor r25, r25
28fa: 38 2f mov r19, r24
28fc: 22 27 eor r18, r18
28fe: 8e b5 in r24, 0x2e ; 46
2900: 99 27 eor r25, r25
2902: 28 2b or r18, r24
2904: 39 2b or r19, r25
2906: c9 01 movw r24, r18
2908: 8d 50 subi r24, 0x0D ; 13
290a: 9e 4f sbci r25, 0xFE ; 254
290c: 87 5e subi r24, 0xE7 ; 231
290e: 93 40 sbci r25, 0x03 ; 3
2910: d0 f4 brcc .+52 ; 0x2946 <__vector_19+0x84>
2912: 80 91 99 04 lds r24, 0x0499
2916: 85 30 cpi r24, 0x05 ; 5
2918: 19 f0 breq .+6 ; 0x2920 <__vector_19+0x5e>
291a: 86 30 cpi r24, 0x06 ; 6
291c: 69 f4 brne .+26 ; 0x2938 <__vector_19+0x76>
291e: 06 c0 rjmp .+12 ; 0x292c <__vector_19+0x6a>
2920: 30 93 9b 04 sts 0x049B, r19
2924: 20 93 9a 04 sts 0x049A, r18
2928: 86 e0 ldi r24, 0x06 ; 6
292a: 0b c0 rjmp .+22 ; 0x2942 <__vector_19+0x80>
292c: 30 93 9d 04 sts 0x049D, r19
2930: 20 93 9c 04 sts 0x049C, r18
2934: 87 e0 ldi r24, 0x07 ; 7
2936: 05 c0 rjmp .+10 ; 0x2942 <__vector_19+0x80>
2938: 30 93 9f 04 sts 0x049F, r19
293c: 20 93 9e 04 sts 0x049E, r18
2940: 85 e0 ldi r24, 0x05 ; 5
2942: 80 93 99 04 sts 0x0499, r24
2946: 10 92 96 04 sts 0x0496, r1
294a: 9f 91 pop r25
294c: 8f 91 pop r24
294e: 4f 91 pop r20
2950: 3f 91 pop r19
2952: 2f 91 pop r18
2954: 0f 90 pop r0
2956: 0f be out 0x3f, r0 ; 63
2958: 0f 90 pop r0
295a: 1f 90 pop r1
295c: 18 95 reti
 
0000295e <heading_MM3>:
295e: a0 e1 ldi r26, 0x10 ; 16
2960: b0 e0 ldi r27, 0x00 ; 0
2962: e5 eb ldi r30, 0xB5 ; 181
2964: f4 e1 ldi r31, 0x14 ; 20
2966: 0c 94 66 2e jmp 0x5ccc ; 0x5ccc <__prologue_saves__>
296a: e0 90 f1 04 lds r14, 0x04F1
296e: ff 24 eor r15, r15
2970: 33 e0 ldi r19, 0x03 ; 3
2972: ee 0c add r14, r14
2974: ff 1c adc r15, r15
2976: 3a 95 dec r19
2978: e1 f7 brne .-8 ; 0x2972 <heading_MM3+0x14>
297a: 00 27 eor r16, r16
297c: 11 27 eor r17, r17
297e: 60 91 d7 01 lds r22, 0x01D7
2982: 70 91 d8 01 lds r23, 0x01D8
2986: 80 91 d9 01 lds r24, 0x01D9
298a: 90 91 da 01 lds r25, 0x01DA
298e: a8 01 movw r20, r16
2990: 97 01 movw r18, r14
2992: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
2996: 59 01 movw r10, r18
2998: 6a 01 movw r12, r20
299a: c9 01 movw r24, r18
299c: 0e 94 c9 17 call 0x2f92 ; 0x2f92 <sin_f>
29a0: 6d 87 std Y+13, r22 ; 0x0d
29a2: 7e 87 std Y+14, r23 ; 0x0e
29a4: 8f 87 std Y+15, r24 ; 0x0f
29a6: 98 8b std Y+16, r25 ; 0x10
29a8: c5 01 movw r24, r10
29aa: 0e 94 29 18 call 0x3052 ; 0x3052 <cos_f>
29ae: 69 87 std Y+9, r22 ; 0x09
29b0: 7a 87 std Y+10, r23 ; 0x0a
29b2: 8b 87 std Y+11, r24 ; 0x0b
29b4: 9c 87 std Y+12, r25 ; 0x0c
29b6: 60 91 df 01 lds r22, 0x01DF
29ba: 70 91 e0 01 lds r23, 0x01E0
29be: 80 91 e1 01 lds r24, 0x01E1
29c2: 90 91 e2 01 lds r25, 0x01E2
29c6: a8 01 movw r20, r16
29c8: 97 01 movw r18, r14
29ca: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
29ce: 79 01 movw r14, r18
29d0: 8a 01 movw r16, r20
29d2: c9 01 movw r24, r18
29d4: 0e 94 c9 17 call 0x2f92 ; 0x2f92 <sin_f>
29d8: 6d 83 std Y+5, r22 ; 0x05
29da: 7e 83 std Y+6, r23 ; 0x06
29dc: 8f 83 std Y+7, r24 ; 0x07
29de: 98 87 std Y+8, r25 ; 0x08
29e0: c7 01 movw r24, r14
29e2: 0e 94 29 18 call 0x3052 ; 0x3052 <cos_f>
29e6: 69 83 std Y+1, r22 ; 0x01
29e8: 7a 83 std Y+2, r23 ; 0x02
29ea: 8b 83 std Y+3, r24 ; 0x03
29ec: 9c 83 std Y+4, r25 ; 0x04
29ee: a0 90 9a 04 lds r10, 0x049A
29f2: b0 90 9b 04 lds r11, 0x049B
29f6: 80 91 8d 04 lds r24, 0x048D
29fa: 99 27 eor r25, r25
29fc: 87 fd sbrc r24, 7
29fe: 90 95 com r25
2a00: a8 1a sub r10, r24
2a02: b9 0a sbc r11, r25
2a04: 80 90 9c 04 lds r8, 0x049C
2a08: 90 90 9d 04 lds r9, 0x049D
2a0c: 80 91 8e 04 lds r24, 0x048E
2a10: 99 27 eor r25, r25
2a12: 87 fd sbrc r24, 7
2a14: 90 95 com r25
2a16: 88 1a sub r8, r24
2a18: 99 0a sbc r9, r25
2a1a: 40 90 9e 04 lds r4, 0x049E
2a1e: 50 90 9f 04 lds r5, 0x049F
2a22: 80 91 8f 04 lds r24, 0x048F
2a26: 99 27 eor r25, r25
2a28: 87 fd sbrc r24, 7
2a2a: 90 95 com r25
2a2c: 48 1a sub r4, r24
2a2e: 59 0a sbc r5, r25
2a30: 20 90 90 04 lds r2, 0x0490
2a34: 30 90 91 04 lds r3, 0x0491
2a38: c0 90 92 04 lds r12, 0x0492
2a3c: d0 90 93 04 lds r13, 0x0493
2a40: c2 14 cp r12, r2
2a42: d3 04 cpc r13, r3
2a44: d0 f4 brcc .+52 ; 0x2a7a <heading_MM3+0x11c>
2a46: 60 90 94 04 lds r6, 0x0494
2a4a: 70 90 95 04 lds r7, 0x0495
2a4e: 62 14 cp r6, r2
2a50: 73 04 cpc r7, r3
2a52: 98 f4 brcc .+38 ; 0x2a7a <heading_MM3+0x11c>
2a54: 71 01 movw r14, r2
2a56: 00 27 eor r16, r16
2a58: 11 27 eor r17, r17
2a5a: b4 01 movw r22, r8
2a5c: 88 27 eor r24, r24
2a5e: 77 fd sbrc r23, 7
2a60: 80 95 com r24
2a62: 98 2f mov r25, r24
2a64: a8 01 movw r20, r16
2a66: 97 01 movw r18, r14
2a68: 0e 94 e3 2d call 0x5bc6 ; 0x5bc6 <__mulsi3>
2a6c: 96 01 movw r18, r12
2a6e: 44 27 eor r20, r20
2a70: 55 27 eor r21, r21
2a72: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
2a76: 49 01 movw r8, r18
2a78: 1c c0 rjmp .+56 ; 0x2ab2 <heading_MM3+0x154>
2a7a: 2c 14 cp r2, r12
2a7c: 3d 04 cpc r3, r13
2a7e: 48 f5 brcc .+82 ; 0x2ad2 <heading_MM3+0x174>
2a80: 60 90 94 04 lds r6, 0x0494
2a84: 70 90 95 04 lds r7, 0x0495
2a88: 6c 14 cp r6, r12
2a8a: 7d 04 cpc r7, r13
2a8c: 10 f5 brcc .+68 ; 0x2ad2 <heading_MM3+0x174>
2a8e: 76 01 movw r14, r12
2a90: 00 27 eor r16, r16
2a92: 11 27 eor r17, r17
2a94: b5 01 movw r22, r10
2a96: 88 27 eor r24, r24
2a98: 77 fd sbrc r23, 7
2a9a: 80 95 com r24
2a9c: 98 2f mov r25, r24
2a9e: a8 01 movw r20, r16
2aa0: 97 01 movw r18, r14
2aa2: 0e 94 e3 2d call 0x5bc6 ; 0x5bc6 <__mulsi3>
2aa6: 91 01 movw r18, r2
2aa8: 44 27 eor r20, r20
2aaa: 55 27 eor r21, r21
2aac: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
2ab0: 59 01 movw r10, r18
2ab2: b2 01 movw r22, r4
2ab4: 88 27 eor r24, r24
2ab6: 77 fd sbrc r23, 7
2ab8: 80 95 com r24
2aba: 98 2f mov r25, r24
2abc: a8 01 movw r20, r16
2abe: 97 01 movw r18, r14
2ac0: 0e 94 e3 2d call 0x5bc6 ; 0x5bc6 <__mulsi3>
2ac4: 93 01 movw r18, r6
2ac6: 44 27 eor r20, r20
2ac8: 55 27 eor r21, r21
2aca: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
2ace: 29 01 movw r4, r18
2ad0: 24 c0 rjmp .+72 ; 0x2b1a <heading_MM3+0x1bc>
2ad2: e0 90 94 04 lds r14, 0x0494
2ad6: f0 90 95 04 lds r15, 0x0495
2ada: 00 27 eor r16, r16
2adc: 11 27 eor r17, r17
2ade: b5 01 movw r22, r10
2ae0: 88 27 eor r24, r24
2ae2: 77 fd sbrc r23, 7
2ae4: 80 95 com r24
2ae6: 98 2f mov r25, r24
2ae8: a8 01 movw r20, r16
2aea: 97 01 movw r18, r14
2aec: 0e 94 e3 2d call 0x5bc6 ; 0x5bc6 <__mulsi3>
2af0: 91 01 movw r18, r2
2af2: 44 27 eor r20, r20
2af4: 55 27 eor r21, r21
2af6: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
2afa: 59 01 movw r10, r18
2afc: b4 01 movw r22, r8
2afe: 88 27 eor r24, r24
2b00: 77 fd sbrc r23, 7
2b02: 80 95 com r24
2b04: 98 2f mov r25, r24
2b06: a8 01 movw r20, r16
2b08: 97 01 movw r18, r14
2b0a: 0e 94 e3 2d call 0x5bc6 ; 0x5bc6 <__mulsi3>
2b0e: 96 01 movw r18, r12
2b10: 44 27 eor r20, r20
2b12: 55 27 eor r21, r21
2b14: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
2b18: 49 01 movw r8, r18
2b1a: b0 92 6d 04 sts 0x046D, r11
2b1e: a0 92 6c 04 sts 0x046C, r10
2b22: 90 92 6f 04 sts 0x046F, r9
2b26: 80 92 6e 04 sts 0x046E, r8
2b2a: 50 92 71 04 sts 0x0471, r5
2b2e: 40 92 70 04 sts 0x0470, r4
2b32: b5 01 movw r22, r10
2b34: 88 27 eor r24, r24
2b36: 77 fd sbrc r23, 7
2b38: 80 95 com r24
2b3a: 98 2f mov r25, r24
2b3c: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
2b40: 29 85 ldd r18, Y+9 ; 0x09
2b42: 3a 85 ldd r19, Y+10 ; 0x0a
2b44: 4b 85 ldd r20, Y+11 ; 0x0b
2b46: 5c 85 ldd r21, Y+12 ; 0x0c
2b48: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
2b4c: 5b 01 movw r10, r22
2b4e: 6c 01 movw r12, r24
2b50: b4 01 movw r22, r8
2b52: 88 27 eor r24, r24
2b54: 77 fd sbrc r23, 7
2b56: 80 95 com r24
2b58: 98 2f mov r25, r24
2b5a: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
2b5e: 7b 01 movw r14, r22
2b60: 8c 01 movw r16, r24
2b62: 2d 81 ldd r18, Y+5 ; 0x05
2b64: 3e 81 ldd r19, Y+6 ; 0x06
2b66: 4f 81 ldd r20, Y+7 ; 0x07
2b68: 58 85 ldd r21, Y+8 ; 0x08
2b6a: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
2b6e: 2d 85 ldd r18, Y+13 ; 0x0d
2b70: 3e 85 ldd r19, Y+14 ; 0x0e
2b72: 4f 85 ldd r20, Y+15 ; 0x0f
2b74: 58 89 ldd r21, Y+16 ; 0x10
2b76: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
2b7a: 9b 01 movw r18, r22
2b7c: ac 01 movw r20, r24
2b7e: c6 01 movw r24, r12
2b80: b5 01 movw r22, r10
2b82: 0e 94 7c 2c call 0x58f8 ; 0x58f8 <__addsf3>
2b86: 3b 01 movw r6, r22
2b88: 4c 01 movw r8, r24
2b8a: b2 01 movw r22, r4
2b8c: 88 27 eor r24, r24
2b8e: 77 fd sbrc r23, 7
2b90: 80 95 com r24
2b92: 98 2f mov r25, r24
2b94: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
2b98: 5b 01 movw r10, r22
2b9a: 6c 01 movw r12, r24
2b9c: 29 81 ldd r18, Y+1 ; 0x01
2b9e: 3a 81 ldd r19, Y+2 ; 0x02
2ba0: 4b 81 ldd r20, Y+3 ; 0x03
2ba2: 5c 81 ldd r21, Y+4 ; 0x04
2ba4: c8 01 movw r24, r16
2ba6: b7 01 movw r22, r14
2ba8: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
2bac: 7b 01 movw r14, r22
2bae: 8c 01 movw r16, r24
2bb0: 2d 81 ldd r18, Y+5 ; 0x05
2bb2: 3e 81 ldd r19, Y+6 ; 0x06
2bb4: 4f 81 ldd r20, Y+7 ; 0x07
2bb6: 58 85 ldd r21, Y+8 ; 0x08
2bb8: c6 01 movw r24, r12
2bba: b5 01 movw r22, r10
2bbc: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
2bc0: 9b 01 movw r18, r22
2bc2: ac 01 movw r20, r24
2bc4: c8 01 movw r24, r16
2bc6: b7 01 movw r22, r14
2bc8: 0e 94 7c 2c call 0x58f8 ; 0x58f8 <__addsf3>
2bcc: 0e 94 04 2d call 0x5a08 ; 0x5a08 <__fixsfsi>
2bd0: 7b 01 movw r14, r22
2bd2: 8c 01 movw r16, r24
2bd4: 29 81 ldd r18, Y+1 ; 0x01
2bd6: 3a 81 ldd r19, Y+2 ; 0x02
2bd8: 4b 81 ldd r20, Y+3 ; 0x03
2bda: 5c 81 ldd r21, Y+4 ; 0x04
2bdc: c6 01 movw r24, r12
2bde: b5 01 movw r22, r10
2be0: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
2be4: 2d 85 ldd r18, Y+13 ; 0x0d
2be6: 3e 85 ldd r19, Y+14 ; 0x0e
2be8: 4f 85 ldd r20, Y+15 ; 0x0f
2bea: 58 89 ldd r21, Y+16 ; 0x10
2bec: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
2bf0: 9b 01 movw r18, r22
2bf2: ac 01 movw r20, r24
2bf4: c4 01 movw r24, r8
2bf6: b3 01 movw r22, r6
2bf8: 0e 94 7b 2c call 0x58f6 ; 0x58f6 <__subsf3>
2bfc: 0e 94 04 2d call 0x5a08 ; 0x5a08 <__fixsfsi>
2c00: dc 01 movw r26, r24
2c02: cb 01 movw r24, r22
2c04: b7 01 movw r22, r14
2c06: 0e 94 21 17 call 0x2e42 ; 0x2e42 <atan2_i>
2c0a: 9c 01 movw r18, r24
2c0c: 97 ff sbrs r25, 7
2c0e: 05 c0 rjmp .+10 ; 0x2c1a <heading_MM3+0x2bc>
2c10: 88 27 eor r24, r24
2c12: 99 27 eor r25, r25
2c14: 82 1b sub r24, r18
2c16: 93 0b sbc r25, r19
2c18: 04 c0 rjmp .+8 ; 0x2c22 <heading_MM3+0x2c4>
2c1a: 88 e6 ldi r24, 0x68 ; 104
2c1c: 91 e0 ldi r25, 0x01 ; 1
2c1e: 82 1b sub r24, r18
2c20: 93 0b sbc r25, r19
2c22: e2 e1 ldi r30, 0x12 ; 18
2c24: c0 5f subi r28, 0xF0 ; 240
2c26: 0c 94 82 2e jmp 0x5d04 ; 0x5d04 <__epilogue_restores__>
 
00002c2a <timer0_MM3>:
2c2a: 80 91 96 04 lds r24, 0x0496
2c2e: 81 30 cpi r24, 0x01 ; 1
2c30: 41 f0 breq .+16 ; 0x2c42 <timer0_MM3+0x18>
2c32: 81 30 cpi r24, 0x01 ; 1
2c34: 18 f0 brcs .+6 ; 0x2c3c <timer0_MM3+0x12>
2c36: 82 30 cpi r24, 0x02 ; 2
2c38: 49 f5 brne .+82 ; 0x2c8c <timer0_MM3+0x62>
2c3a: 1c c0 rjmp .+56 ; 0x2c74 <timer0_MM3+0x4a>
2c3c: 2a 9a sbi 0x05, 2 ; 5
2c3e: 81 e0 ldi r24, 0x01 ; 1
2c40: 16 c0 rjmp .+44 ; 0x2c6e <timer0_MM3+0x44>
2c42: 2a 98 cbi 0x05, 2 ; 5
2c44: 80 91 99 04 lds r24, 0x0499
2c48: 85 30 cpi r24, 0x05 ; 5
2c4a: 11 f4 brne .+4 ; 0x2c50 <timer0_MM3+0x26>
2c4c: 81 e3 ldi r24, 0x31 ; 49
2c4e: 05 c0 rjmp .+10 ; 0x2c5a <timer0_MM3+0x30>
2c50: 86 30 cpi r24, 0x06 ; 6
2c52: 11 f4 brne .+4 ; 0x2c58 <timer0_MM3+0x2e>
2c54: 82 e3 ldi r24, 0x32 ; 50
2c56: 01 c0 rjmp .+2 ; 0x2c5a <timer0_MM3+0x30>
2c58: 83 e3 ldi r24, 0x33 ; 51
2c5a: 8e bd out 0x2e, r24 ; 46
2c5c: 88 e0 ldi r24, 0x08 ; 8
2c5e: 90 e0 ldi r25, 0x00 ; 0
2c60: 0e 94 b2 0b call 0x1764 ; 0x1764 <SetDelay>
2c64: 90 93 98 04 sts 0x0498, r25
2c68: 80 93 97 04 sts 0x0497, r24
2c6c: 82 e0 ldi r24, 0x02 ; 2
2c6e: 80 93 96 04 sts 0x0496, r24
2c72: 08 95 ret
2c74: 80 91 97 04 lds r24, 0x0497
2c78: 90 91 98 04 lds r25, 0x0498
2c7c: 0e 94 bb 0b call 0x1776 ; 0x1776 <CheckDelay>
2c80: 88 23 and r24, r24
2c82: 21 f0 breq .+8 ; 0x2c8c <timer0_MM3+0x62>
2c84: 1e bc out 0x2e, r1 ; 46
2c86: 83 e0 ldi r24, 0x03 ; 3
2c88: 80 93 96 04 sts 0x0496, r24
2c8c: 08 95 ret
 
00002c8e <calib_MM3>:
2c8e: a0 e0 ldi r26, 0x00 ; 0
2c90: b0 e0 ldi r27, 0x00 ; 0
2c92: ed e4 ldi r30, 0x4D ; 77
2c94: f6 e1 ldi r31, 0x16 ; 22
2c96: 0c 94 68 2e jmp 0x5cd0 ; 0x5cd0 <__prologue_saves__+0x4>
2c9a: 29 9a sbi 0x05, 1 ; 5
2c9c: 28 98 cbi 0x05, 0 ; 5
2c9e: ee 24 eor r14, r14
2ca0: ff 24 eor r15, r15
2ca2: 00 e0 ldi r16, 0x00 ; 0
2ca4: 10 e0 ldi r17, 0x00 ; 0
2ca6: aa 24 eor r10, r10
2ca8: bb 24 eor r11, r11
2caa: cc 24 eor r12, r12
2cac: dd 24 eor r13, r13
2cae: 66 24 eor r6, r6
2cb0: 77 24 eor r7, r7
2cb2: 88 24 eor r8, r8
2cb4: 99 24 eor r9, r9
2cb6: 62 e3 ldi r22, 0x32 ; 50
2cb8: 46 2e mov r4, r22
2cba: 55 24 eor r5, r5
2cbc: 80 91 9a 04 lds r24, 0x049A
2cc0: 90 91 9b 04 lds r25, 0x049B
2cc4: 08 17 cp r16, r24
2cc6: 19 07 cpc r17, r25
2cc8: 2c f4 brge .+10 ; 0x2cd4 <calib_MM3+0x46>
2cca: 00 91 9a 04 lds r16, 0x049A
2cce: 10 91 9b 04 lds r17, 0x049B
2cd2: 0b c0 rjmp .+22 ; 0x2cea <calib_MM3+0x5c>
2cd4: 80 91 9a 04 lds r24, 0x049A
2cd8: 90 91 9b 04 lds r25, 0x049B
2cdc: 8e 15 cp r24, r14
2cde: 9f 05 cpc r25, r15
2ce0: 24 f4 brge .+8 ; 0x2cea <calib_MM3+0x5c>
2ce2: e0 90 9a 04 lds r14, 0x049A
2ce6: f0 90 9b 04 lds r15, 0x049B
2cea: 80 91 9c 04 lds r24, 0x049C
2cee: 90 91 9d 04 lds r25, 0x049D
2cf2: c8 16 cp r12, r24
2cf4: d9 06 cpc r13, r25
2cf6: 2c f4 brge .+10 ; 0x2d02 <calib_MM3+0x74>
2cf8: c0 90 9c 04 lds r12, 0x049C
2cfc: d0 90 9d 04 lds r13, 0x049D
2d00: 0b c0 rjmp .+22 ; 0x2d18 <calib_MM3+0x8a>
2d02: 80 91 9c 04 lds r24, 0x049C
2d06: 90 91 9d 04 lds r25, 0x049D
2d0a: 8a 15 cp r24, r10
2d0c: 9b 05 cpc r25, r11
2d0e: 24 f4 brge .+8 ; 0x2d18 <calib_MM3+0x8a>
2d10: a0 90 9c 04 lds r10, 0x049C
2d14: b0 90 9d 04 lds r11, 0x049D
2d18: 80 91 9e 04 lds r24, 0x049E
2d1c: 90 91 9f 04 lds r25, 0x049F
2d20: 88 16 cp r8, r24
2d22: 99 06 cpc r9, r25
2d24: 2c f4 brge .+10 ; 0x2d30 <calib_MM3+0xa2>
2d26: 80 90 9e 04 lds r8, 0x049E
2d2a: 90 90 9f 04 lds r9, 0x049F
2d2e: 0b c0 rjmp .+22 ; 0x2d46 <calib_MM3+0xb8>
2d30: 80 91 9e 04 lds r24, 0x049E
2d34: 90 91 9f 04 lds r25, 0x049F
2d38: 86 15 cp r24, r6
2d3a: 97 05 cpc r25, r7
2d3c: 24 f4 brge .+8 ; 0x2d46 <calib_MM3+0xb8>
2d3e: 60 90 9e 04 lds r6, 0x049E
2d42: 70 90 9f 04 lds r7, 0x049F
2d46: 55 20 and r5, r5
2d48: 81 f4 brne .+32 ; 0x2d6a <calib_MM3+0xdc>
2d4a: 85 b1 in r24, 0x05 ; 5
2d4c: 91 e0 ldi r25, 0x01 ; 1
2d4e: 89 27 eor r24, r25
2d50: 85 b9 out 0x05, r24 ; 5
2d52: 85 b1 in r24, 0x05 ; 5
2d54: 92 e0 ldi r25, 0x02 ; 2
2d56: 89 27 eor r24, r25
2d58: 85 b9 out 0x05, r24 ; 5
2d5a: 82 e3 ldi r24, 0x32 ; 50
2d5c: 90 e0 ldi r25, 0x00 ; 0
2d5e: 90 93 a7 01 sts 0x01A7, r25
2d62: 80 93 a6 01 sts 0x01A6, r24
2d66: 52 e3 ldi r21, 0x32 ; 50
2d68: 55 2e mov r5, r21
2d6a: 8a e0 ldi r24, 0x0A ; 10
2d6c: 90 e0 ldi r25, 0x00 ; 0
2d6e: 0e 94 b2 0b call 0x1764 ; 0x1764 <SetDelay>
2d72: ec 01 movw r28, r24
2d74: ce 01 movw r24, r28
2d76: 0e 94 bb 0b call 0x1776 ; 0x1776 <CheckDelay>
2d7a: 88 23 and r24, r24
2d7c: d9 f3 breq .-10 ; 0x2d74 <calib_MM3+0xe6>
2d7e: e0 91 d6 04 lds r30, 0x04D6
2d82: ff 27 eor r31, r31
2d84: ee 0f add r30, r30
2d86: ff 1f adc r31, r31
2d88: e8 55 subi r30, 0x58 ; 88
2d8a: fb 4f sbci r31, 0xFB ; 251
2d8c: 80 81 ld r24, Z
2d8e: 91 81 ldd r25, Z+1 ; 0x01
2d90: 84 36 cpi r24, 0x64 ; 100
2d92: 91 05 cpc r25, r1
2d94: 0c f4 brge .+2 ; 0x2d98 <calib_MM3+0x10a>
2d96: 4a 94 dec r4
2d98: 44 20 and r4, r4
2d9a: 11 f0 breq .+4 ; 0x2da0 <calib_MM3+0x112>
2d9c: 5a 94 dec r5
2d9e: 8e cf rjmp .-228 ; 0x2cbc <calib_MM3+0x2e>
2da0: c8 01 movw r24, r16
2da2: 8e 19 sub r24, r14
2da4: 9f 09 sbc r25, r15
2da6: 90 93 91 04 sts 0x0491, r25
2daa: 80 93 90 04 sts 0x0490, r24
2dae: c6 01 movw r24, r12
2db0: 8a 19 sub r24, r10
2db2: 9b 09 sbc r25, r11
2db4: 90 93 93 04 sts 0x0493, r25
2db8: 80 93 92 04 sts 0x0492, r24
2dbc: c4 01 movw r24, r8
2dbe: 86 19 sub r24, r6
2dc0: 97 09 sbc r25, r7
2dc2: 90 93 95 04 sts 0x0495, r25
2dc6: 80 93 94 04 sts 0x0494, r24
2dca: ed e8 ldi r30, 0x8D ; 141
2dcc: f4 e0 ldi r31, 0x04 ; 4
2dce: c8 01 movw r24, r16
2dd0: 8e 0d add r24, r14
2dd2: 9f 1d adc r25, r15
2dd4: 62 e0 ldi r22, 0x02 ; 2
2dd6: 70 e0 ldi r23, 0x00 ; 0
2dd8: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
2ddc: 60 93 8d 04 sts 0x048D, r22
2de0: c6 01 movw r24, r12
2de2: 8a 0d add r24, r10
2de4: 9b 1d adc r25, r11
2de6: 62 e0 ldi r22, 0x02 ; 2
2de8: 70 e0 ldi r23, 0x00 ; 0
2dea: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
2dee: 60 93 8e 04 sts 0x048E, r22
2df2: c4 01 movw r24, r8
2df4: 86 0d add r24, r6
2df6: 97 1d adc r25, r7
2df8: 62 e0 ldi r22, 0x02 ; 2
2dfa: 70 e0 ldi r23, 0x00 ; 0
2dfc: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
2e00: 60 93 8f 04 sts 0x048F, r22
2e04: 89 e0 ldi r24, 0x09 ; 9
2e06: ac e2 ldi r26, 0x2C ; 44
2e08: b1 e0 ldi r27, 0x01 ; 1
2e0a: 18 2e mov r1, r24
2e0c: 0e 94 bc 2e call 0x5d78 ; 0x5d78 <__eeprom_write_block_1F2021>
2e10: e0 e1 ldi r30, 0x10 ; 16
2e12: cd b7 in r28, 0x3d ; 61
2e14: de b7 in r29, 0x3e ; 62
2e16: 0c 94 84 2e jmp 0x5d08 ; 0x5d08 <__epilogue_restores__+0x4>
 
00002e1a <init_MM3>:
2e1a: 83 ed ldi r24, 0xD3 ; 211
2e1c: 8c bd out 0x2c, r24 ; 44
2e1e: 84 b1 in r24, 0x04 ; 4
2e20: 84 6a ori r24, 0xA4 ; 164
2e22: 84 b9 out 0x04, r24 ; 4
2e24: 5b 98 cbi 0x0b, 3 ; 11
2e26: 85 e0 ldi r24, 0x05 ; 5
2e28: 80 93 99 04 sts 0x0499, r24
2e2c: 10 92 96 04 sts 0x0496, r1
2e30: 89 e0 ldi r24, 0x09 ; 9
2e32: ed e8 ldi r30, 0x8D ; 141
2e34: f4 e0 ldi r31, 0x04 ; 4
2e36: ac e2 ldi r26, 0x2C ; 44
2e38: b1 e0 ldi r27, 0x01 ; 1
2e3a: 18 2e mov r1, r24
2e3c: 0e 94 ab 2e call 0x5d56 ; 0x5d56 <__eeprom_read_block_1F2021>
2e40: 08 95 ret
 
00002e42 <atan2_i>:
2e42: 1f 93 push r17
2e44: cf 93 push r28
2e46: df 93 push r29
2e48: ec 01 movw r28, r24
2e4a: 89 2b or r24, r25
2e4c: 31 f4 brne .+12 ; 0x2e5a <atan2_i+0x18>
2e4e: 61 15 cp r22, r1
2e50: 71 05 cpc r23, r1
2e52: 19 f4 brne .+6 ; 0x2e5a <atan2_i+0x18>
2e54: 80 e0 ldi r24, 0x00 ; 0
2e56: 90 e0 ldi r25, 0x00 ; 0
2e58: 8e c0 rjmp .+284 ; 0x2f76 <atan2_i+0x134>
2e5a: 77 fd sbrc r23, 7
2e5c: 02 c0 rjmp .+4 ; 0x2e62 <atan2_i+0x20>
2e5e: 11 e0 ldi r17, 0x01 ; 1
2e60: 01 c0 rjmp .+2 ; 0x2e64 <atan2_i+0x22>
2e62: 1f ef ldi r17, 0xFF ; 255
2e64: 20 97 sbiw r28, 0x00 ; 0
2e66: 29 f4 brne .+10 ; 0x2e72 <atan2_i+0x30>
2e68: 8a e5 ldi r24, 0x5A ; 90
2e6a: 18 02 muls r17, r24
2e6c: c0 01 movw r24, r0
2e6e: 11 24 eor r1, r1
2e70: 82 c0 rjmp .+260 ; 0x2f76 <atan2_i+0x134>
2e72: 88 27 eor r24, r24
2e74: 77 fd sbrc r23, 7
2e76: 80 95 com r24
2e78: 98 2f mov r25, r24
2e7a: 22 e3 ldi r18, 0x32 ; 50
2e7c: 30 e0 ldi r19, 0x00 ; 0
2e7e: 40 e0 ldi r20, 0x00 ; 0
2e80: 50 e0 ldi r21, 0x00 ; 0
2e82: 0e 94 e3 2d call 0x5bc6 ; 0x5bc6 <__mulsi3>
2e86: 9e 01 movw r18, r28
2e88: 44 27 eor r20, r20
2e8a: 37 fd sbrc r19, 7
2e8c: 40 95 com r20
2e8e: 54 2f mov r21, r20
2e90: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
2e94: f9 01 movw r30, r18
2e96: 37 ff sbrs r19, 7
2e98: 03 c0 rjmp .+6 ; 0x2ea0 <atan2_i+0x5e>
2e9a: f0 95 com r31
2e9c: e1 95 neg r30
2e9e: ff 4f sbci r31, 0xFF ; 255
2ea0: 41 e0 ldi r20, 0x01 ; 1
2ea2: ee 30 cpi r30, 0x0E ; 14
2ea4: f4 07 cpc r31, r20
2ea6: 34 f4 brge .+12 ; 0x2eb4 <atan2_i+0x72>
2ea8: e6 56 subi r30, 0x66 ; 102
2eaa: fb 4f sbci r31, 0xFB ; 251
2eac: 84 91 lpm r24, Z
2eae: 28 2f mov r18, r24
2eb0: 33 27 eor r19, r19
2eb2: 47 c0 rjmp .+142 ; 0x2f42 <atan2_i+0x100>
2eb4: 56 e1 ldi r21, 0x16 ; 22
2eb6: e7 37 cpi r30, 0x77 ; 119
2eb8: f5 07 cpc r31, r21
2eba: 1c f0 brlt .+6 ; 0x2ec2 <atan2_i+0x80>
2ebc: 2a e5 ldi r18, 0x5A ; 90
2ebe: 30 e0 ldi r19, 0x00 ; 0
2ec0: 40 c0 rjmp .+128 ; 0x2f42 <atan2_i+0x100>
2ec2: 87 e0 ldi r24, 0x07 ; 7
2ec4: e6 37 cpi r30, 0x76 ; 118
2ec6: f8 07 cpc r31, r24
2ec8: 1c f0 brlt .+6 ; 0x2ed0 <atan2_i+0x8e>
2eca: 29 e5 ldi r18, 0x59 ; 89
2ecc: 30 e0 ldi r19, 0x00 ; 0
2ece: 39 c0 rjmp .+114 ; 0x2f42 <atan2_i+0x100>
2ed0: 44 e0 ldi r20, 0x04 ; 4
2ed2: ee 37 cpi r30, 0x7E ; 126
2ed4: f4 07 cpc r31, r20
2ed6: 1c f0 brlt .+6 ; 0x2ede <atan2_i+0x9c>
2ed8: 28 e5 ldi r18, 0x58 ; 88
2eda: 30 e0 ldi r19, 0x00 ; 0
2edc: 32 c0 rjmp .+100 ; 0x2f42 <atan2_i+0x100>
2ede: 53 e0 ldi r21, 0x03 ; 3
2ee0: e4 33 cpi r30, 0x34 ; 52
2ee2: f5 07 cpc r31, r21
2ee4: 1c f0 brlt .+6 ; 0x2eec <atan2_i+0xaa>
2ee6: 27 e5 ldi r18, 0x57 ; 87
2ee8: 30 e0 ldi r19, 0x00 ; 0
2eea: 2b c0 rjmp .+86 ; 0x2f42 <atan2_i+0x100>
2eec: 82 e0 ldi r24, 0x02 ; 2
2eee: e0 38 cpi r30, 0x80 ; 128
2ef0: f8 07 cpc r31, r24
2ef2: 1c f0 brlt .+6 ; 0x2efa <atan2_i+0xb8>
2ef4: 26 e5 ldi r18, 0x56 ; 86
2ef6: 30 e0 ldi r19, 0x00 ; 0
2ef8: 24 c0 rjmp .+72 ; 0x2f42 <atan2_i+0x100>
2efa: 42 e0 ldi r20, 0x02 ; 2
2efc: e8 30 cpi r30, 0x08 ; 8
2efe: f4 07 cpc r31, r20
2f00: 1c f0 brlt .+6 ; 0x2f08 <atan2_i+0xc6>
2f02: 25 e5 ldi r18, 0x55 ; 85
2f04: 30 e0 ldi r19, 0x00 ; 0
2f06: 1d c0 rjmp .+58 ; 0x2f42 <atan2_i+0x100>
2f08: 51 e0 ldi r21, 0x01 ; 1
2f0a: e8 3b cpi r30, 0xB8 ; 184
2f0c: f5 07 cpc r31, r21
2f0e: 1c f0 brlt .+6 ; 0x2f16 <atan2_i+0xd4>
2f10: 24 e5 ldi r18, 0x54 ; 84
2f12: 30 e0 ldi r19, 0x00 ; 0
2f14: 16 c0 rjmp .+44 ; 0x2f42 <atan2_i+0x100>
2f16: 81 e0 ldi r24, 0x01 ; 1
2f18: ec 37 cpi r30, 0x7C ; 124
2f1a: f8 07 cpc r31, r24
2f1c: 1c f0 brlt .+6 ; 0x2f24 <atan2_i+0xe2>
2f1e: 23 e5 ldi r18, 0x53 ; 83
2f20: 30 e0 ldi r19, 0x00 ; 0
2f22: 0f c0 rjmp .+30 ; 0x2f42 <atan2_i+0x100>
2f24: 41 e0 ldi r20, 0x01 ; 1
2f26: ef 34 cpi r30, 0x4F ; 79
2f28: f4 07 cpc r31, r20
2f2a: 1c f0 brlt .+6 ; 0x2f32 <atan2_i+0xf0>
2f2c: 22 e5 ldi r18, 0x52 ; 82
2f2e: 30 e0 ldi r19, 0x00 ; 0
2f30: 08 c0 rjmp .+16 ; 0x2f42 <atan2_i+0x100>
2f32: eb 52 subi r30, 0x2B ; 43
2f34: f1 40 sbci r31, 0x01 ; 1
2f36: 1c f0 brlt .+6 ; 0x2f3e <atan2_i+0xfc>
2f38: 21 e5 ldi r18, 0x51 ; 81
2f3a: 30 e0 ldi r19, 0x00 ; 0
2f3c: 02 c0 rjmp .+4 ; 0x2f42 <atan2_i+0x100>
2f3e: 20 e5 ldi r18, 0x50 ; 80
2f40: 30 e0 ldi r19, 0x00 ; 0
2f42: 1c 16 cp r1, r28
2f44: 1d 06 cpc r1, r29
2f46: 6c f4 brge .+26 ; 0x2f62 <atan2_i+0x120>
2f48: 81 2f mov r24, r17
2f4a: 99 27 eor r25, r25
2f4c: 87 fd sbrc r24, 7
2f4e: 90 95 com r25
2f50: ac 01 movw r20, r24
2f52: 24 9f mul r18, r20
2f54: c0 01 movw r24, r0
2f56: 25 9f mul r18, r21
2f58: 90 0d add r25, r0
2f5a: 34 9f mul r19, r20
2f5c: 90 0d add r25, r0
2f5e: 11 24 eor r1, r1
2f60: 0a c0 rjmp .+20 ; 0x2f76 <atan2_i+0x134>
2f62: 11 16 cp r1, r17
2f64: 2c f4 brge .+10 ; 0x2f70 <atan2_i+0x12e>
2f66: 84 eb ldi r24, 0xB4 ; 180
2f68: 90 e0 ldi r25, 0x00 ; 0
2f6a: 82 1b sub r24, r18
2f6c: 93 0b sbc r25, r19
2f6e: 03 c0 rjmp .+6 ; 0x2f76 <atan2_i+0x134>
2f70: c9 01 movw r24, r18
2f72: 84 5b subi r24, 0xB4 ; 180
2f74: 90 40 sbci r25, 0x00 ; 0
2f76: df 91 pop r29
2f78: cf 91 pop r28
2f7a: 1f 91 pop r17
2f7c: 08 95 ret
 
00002f7e <pgm_read_float>:
2f7e: fc 01 movw r30, r24
2f80: 25 91 lpm r18, Z+
2f82: 34 91 lpm r19, Z
2f84: fc 01 movw r30, r24
2f86: 32 96 adiw r30, 0x02 ; 2
2f88: 45 91 lpm r20, Z+
2f8a: 54 91 lpm r21, Z
2f8c: ca 01 movw r24, r20
2f8e: b9 01 movw r22, r18
2f90: 08 95 ret
 
00002f92 <sin_f>:
2f92: a0 e0 ldi r26, 0x00 ; 0
2f94: b0 e0 ldi r27, 0x00 ; 0
2f96: ef ec ldi r30, 0xCF ; 207
2f98: f7 e1 ldi r31, 0x17 ; 23
2f9a: 0c 94 70 2e jmp 0x5ce0 ; 0x5ce0 <__prologue_saves__+0x14>
2f9e: 9c 01 movw r18, r24
2fa0: 97 fd sbrc r25, 7
2fa2: 04 c0 rjmp .+8 ; 0x2fac <sin_f+0x1a>
2fa4: 41 e0 ldi r20, 0x01 ; 1
2fa6: c4 2e mov r12, r20
2fa8: d1 2c mov r13, r1
2faa: 06 c0 rjmp .+12 ; 0x2fb8 <sin_f+0x26>
2fac: 30 95 com r19
2fae: 21 95 neg r18
2fb0: 3f 4f sbci r19, 0xFF ; 255
2fb2: 9f ef ldi r25, 0xFF ; 255
2fb4: c9 2e mov r12, r25
2fb6: d9 2e mov r13, r25
2fb8: 2b 35 cpi r18, 0x5B ; 91
2fba: 31 05 cpc r19, r1
2fbc: 5c f0 brlt .+22 ; 0x2fd4 <sin_f+0x42>
2fbe: c9 01 movw r24, r18
2fc0: 8b 55 subi r24, 0x5B ; 91
2fc2: 90 40 sbci r25, 0x00 ; 0
2fc4: 8a 35 cpi r24, 0x5A ; 90
2fc6: 91 05 cpc r25, r1
2fc8: 40 f4 brcc .+16 ; 0x2fda <sin_f+0x48>
2fca: 84 eb ldi r24, 0xB4 ; 180
2fcc: 90 e0 ldi r25, 0x00 ; 0
2fce: 82 1b sub r24, r18
2fd0: 93 0b sbc r25, r19
2fd2: 9c 01 movw r18, r24
2fd4: c1 e0 ldi r28, 0x01 ; 1
2fd6: d0 e0 ldi r29, 0x00 ; 0
2fd8: 10 c0 rjmp .+32 ; 0x2ffa <sin_f+0x68>
2fda: c9 01 movw r24, r18
2fdc: 85 5b subi r24, 0xB5 ; 181
2fde: 90 40 sbci r25, 0x00 ; 0
2fe0: 8a 35 cpi r24, 0x5A ; 90
2fe2: 91 05 cpc r25, r1
2fe4: 18 f4 brcc .+6 ; 0x2fec <sin_f+0x5a>
2fe6: 24 5b subi r18, 0xB4 ; 180
2fe8: 30 40 sbci r19, 0x00 ; 0
2fea: 05 c0 rjmp .+10 ; 0x2ff6 <sin_f+0x64>
2fec: 88 e6 ldi r24, 0x68 ; 104
2fee: 91 e0 ldi r25, 0x01 ; 1
2ff0: 82 1b sub r24, r18
2ff2: 93 0b sbc r25, r19
2ff4: 9c 01 movw r18, r24
2ff6: cf ef ldi r28, 0xFF ; 255
2ff8: df ef ldi r29, 0xFF ; 255
2ffa: 22 0f add r18, r18
2ffc: 33 1f adc r19, r19
2ffe: 22 0f add r18, r18
3000: 33 1f adc r19, r19
3002: c9 01 movw r24, r18
3004: 88 55 subi r24, 0x58 ; 88
3006: 9a 4f sbci r25, 0xFA ; 250
3008: 0e 94 bf 17 call 0x2f7e ; 0x2f7e <pgm_read_float>
300c: 7b 01 movw r14, r22
300e: 8c 01 movw r16, r24
3010: b6 01 movw r22, r12
3012: 88 27 eor r24, r24
3014: 77 fd sbrc r23, 7
3016: 80 95 com r24
3018: 98 2f mov r25, r24
301a: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
301e: 9b 01 movw r18, r22
3020: ac 01 movw r20, r24
3022: c8 01 movw r24, r16
3024: b7 01 movw r22, r14
3026: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
302a: 7b 01 movw r14, r22
302c: 8c 01 movw r16, r24
302e: be 01 movw r22, r28
3030: 88 27 eor r24, r24
3032: 77 fd sbrc r23, 7
3034: 80 95 com r24
3036: 98 2f mov r25, r24
3038: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
303c: 9b 01 movw r18, r22
303e: ac 01 movw r20, r24
3040: c8 01 movw r24, r16
3042: b7 01 movw r22, r14
3044: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
3048: e8 e0 ldi r30, 0x08 ; 8
304a: cd b7 in r28, 0x3d ; 61
304c: de b7 in r29, 0x3e ; 62
304e: 0c 94 8c 2e jmp 0x5d18 ; 0x5d18 <__epilogue_restores__+0x14>
 
00003052 <cos_f>:
3052: 2a e5 ldi r18, 0x5A ; 90
3054: 30 e0 ldi r19, 0x00 ; 0
3056: 28 1b sub r18, r24
3058: 39 0b sbc r19, r25
305a: c9 01 movw r24, r18
305c: 0e 94 c9 17 call 0x2f92 ; 0x2f92 <sin_f>
3060: 08 95 ret
 
00003062 <i2c_init>:
3062: 10 92 b9 00 sts 0x00B9, r1
3066: 8a e2 ldi r24, 0x2A ; 42
3068: 80 93 b8 00 sts 0x00B8, r24
306c: 08 95 ret
 
0000306e <i2c_start>:
306e: 85 ea ldi r24, 0xA5 ; 165
3070: 80 93 bc 00 sts 0x00BC, r24
3074: 08 95 ret
 
00003076 <i2c_stop>:
3076: 84 e9 ldi r24, 0x94 ; 148
3078: 80 93 bc 00 sts 0x00BC, r24
307c: 08 95 ret
 
0000307e <i2c_write_byte>:
307e: 80 93 bb 00 sts 0x00BB, r24
3082: 85 e8 ldi r24, 0x85 ; 133
3084: 80 93 bc 00 sts 0x00BC, r24
3088: 08 95 ret
 
0000308a <i2c_receive_byte>:
308a: 85 ec ldi r24, 0xC5 ; 197
308c: 80 93 bc 00 sts 0x00BC, r24
3090: 08 95 ret
 
00003092 <i2c_receive_last_byte>:
3092: 85 e8 ldi r24, 0x85 ; 133
3094: 80 93 bc 00 sts 0x00BC, r24
3098: 08 95 ret
 
0000309a <__vector_26>:
309a: 1f 92 push r1
309c: 0f 92 push r0
309e: 0f b6 in r0, 0x3f ; 63
30a0: 0f 92 push r0
30a2: 11 24 eor r1, r1
30a4: 8f 93 push r24
30a6: 9f 93 push r25
30a8: ef 93 push r30
30aa: ff 93 push r31
30ac: 80 91 c9 01 lds r24, 0x01C9
30b0: 8f 5f subi r24, 0xFF ; 255
30b2: 80 93 c9 01 sts 0x01C9, r24
30b6: 81 50 subi r24, 0x01 ; 1
30b8: 83 30 cpi r24, 0x03 ; 3
30ba: e9 f1 breq .+122 ; 0x3136 <__vector_26+0x9c>
30bc: 84 30 cpi r24, 0x04 ; 4
30be: 28 f4 brcc .+10 ; 0x30ca <__vector_26+0x30>
30c0: 81 30 cpi r24, 0x01 ; 1
30c2: 81 f0 breq .+32 ; 0x30e4 <__vector_26+0x4a>
30c4: 82 30 cpi r24, 0x02 ; 2
30c6: 78 f5 brcc .+94 ; 0x3126 <__vector_26+0x8c>
30c8: 08 c0 rjmp .+16 ; 0x30da <__vector_26+0x40>
30ca: 85 30 cpi r24, 0x05 ; 5
30cc: d9 f1 breq .+118 ; 0x3144 <__vector_26+0xaa>
30ce: 85 30 cpi r24, 0x05 ; 5
30d0: b8 f1 brcs .+110 ; 0x3140 <__vector_26+0xa6>
30d2: 86 30 cpi r24, 0x06 ; 6
30d4: 09 f0 breq .+2 ; 0x30d8 <__vector_26+0x3e>
30d6: 4f c0 rjmp .+158 ; 0x3176 <__vector_26+0xdc>
30d8: 3e c0 rjmp .+124 ; 0x3156 <__vector_26+0xbc>
30da: 80 91 ca 01 lds r24, 0x01CA
30de: 88 0f add r24, r24
30e0: 8e 5a subi r24, 0xAE ; 174
30e2: 12 c0 rjmp .+36 ; 0x3108 <__vector_26+0x6e>
30e4: 80 91 ca 01 lds r24, 0x01CA
30e8: 8f 5f subi r24, 0xFF ; 255
30ea: 80 93 ca 01 sts 0x01CA, r24
30ee: 81 50 subi r24, 0x01 ; 1
30f0: 81 30 cpi r24, 0x01 ; 1
30f2: 81 f0 breq .+32 ; 0x3114 <__vector_26+0x7a>
30f4: 81 30 cpi r24, 0x01 ; 1
30f6: 30 f0 brcs .+12 ; 0x3104 <__vector_26+0x6a>
30f8: 82 30 cpi r24, 0x02 ; 2
30fa: 79 f0 breq .+30 ; 0x311a <__vector_26+0x80>
30fc: 83 30 cpi r24, 0x03 ; 3
30fe: 09 f0 breq .+2 ; 0x3102 <__vector_26+0x68>
3100: 41 c0 rjmp .+130 ; 0x3184 <__vector_26+0xea>
3102: 0e c0 rjmp .+28 ; 0x3120 <__vector_26+0x86>
3104: 80 91 60 02 lds r24, 0x0260
3108: 80 93 bb 00 sts 0x00BB, r24
310c: 85 e8 ldi r24, 0x85 ; 133
310e: 80 93 bc 00 sts 0x00BC, r24
3112: 38 c0 rjmp .+112 ; 0x3184 <__vector_26+0xea>
3114: 80 91 61 02 lds r24, 0x0261
3118: f7 cf rjmp .-18 ; 0x3108 <__vector_26+0x6e>
311a: 80 91 64 02 lds r24, 0x0264
311e: f4 cf rjmp .-24 ; 0x3108 <__vector_26+0x6e>
3120: 80 91 65 02 lds r24, 0x0265
3124: f1 cf rjmp .-30 ; 0x3108 <__vector_26+0x6e>
3126: 80 91 ca 01 lds r24, 0x01CA
312a: 84 30 cpi r24, 0x04 ; 4
312c: 10 f4 brcc .+4 ; 0x3132 <__vector_26+0x98>
312e: 10 92 c9 01 sts 0x01C9, r1
3132: 85 ea ldi r24, 0xA5 ; 165
3134: ec cf rjmp .-40 ; 0x310e <__vector_26+0x74>
3136: 80 91 cb 01 lds r24, 0x01CB
313a: 88 0f add r24, r24
313c: 8d 5a subi r24, 0xAD ; 173
313e: e4 cf rjmp .-56 ; 0x3108 <__vector_26+0x6e>
3140: 85 ec ldi r24, 0xC5 ; 197
3142: e5 cf rjmp .-54 ; 0x310e <__vector_26+0x74>
3144: e0 91 cb 01 lds r30, 0x01CB
3148: ff 27 eor r31, r31
314a: 80 91 bb 00 lds r24, 0x00BB
314e: e0 56 subi r30, 0x60 ; 96
3150: fb 4f sbci r31, 0xFB ; 251
3152: 80 83 st Z, r24
3154: db cf rjmp .-74 ; 0x310c <__vector_26+0x72>
3156: 80 91 cb 01 lds r24, 0x01CB
315a: e8 2f mov r30, r24
315c: ff 27 eor r31, r31
315e: 90 91 bb 00 lds r25, 0x00BB
3162: ec 55 subi r30, 0x5C ; 92
3164: fb 4f sbci r31, 0xFB ; 251
3166: 90 83 st Z, r25
3168: 8f 5f subi r24, 0xFF ; 255
316a: 80 93 cb 01 sts 0x01CB, r24
316e: 84 30 cpi r24, 0x04 ; 4
3170: 10 f0 brcs .+4 ; 0x3176 <__vector_26+0xdc>
3172: 10 92 cb 01 sts 0x01CB, r1
3176: 84 e9 ldi r24, 0x94 ; 148
3178: 80 93 bc 00 sts 0x00BC, r24
317c: 10 92 c9 01 sts 0x01C9, r1
3180: 10 92 ca 01 sts 0x01CA, r1
3184: ff 91 pop r31
3186: ef 91 pop r30
3188: 9f 91 pop r25
318a: 8f 91 pop r24
318c: 0f 90 pop r0
318e: 0f be out 0x3f, r0 ; 63
3190: 0f 90 pop r0
3192: 1f 90 pop r1
3194: 18 95 reti
 
00003196 <rc_sum_init>:
3196: 83 ec ldi r24, 0xC3 ; 195
3198: 80 93 81 00 sts 0x0081, r24
319c: ef e6 ldi r30, 0x6F ; 111
319e: f0 e0 ldi r31, 0x00 ; 0
31a0: 80 81 ld r24, Z
31a2: 80 62 ori r24, 0x20 ; 32
31a4: 80 83 st Z, r24
31a6: 10 92 d6 01 sts 0x01D6, r1
31aa: 10 92 d5 01 sts 0x01D5, r1
31ae: 10 92 d4 01 sts 0x01D4, r1
31b2: 10 92 d3 01 sts 0x01D3, r1
31b6: 10 92 d2 01 sts 0x01D2, r1
31ba: 10 92 d1 01 sts 0x01D1, r1
31be: 08 95 ret
 
000031c0 <__vector_12>:
31c0: 1f 92 push r1
31c2: 0f 92 push r0
31c4: 0f b6 in r0, 0x3f ; 63
31c6: 0f 92 push r0
31c8: 11 24 eor r1, r1
31ca: 0f 93 push r16
31cc: 1f 93 push r17
31ce: 2f 93 push r18
31d0: 3f 93 push r19
31d2: 4f 93 push r20
31d4: 5f 93 push r21
31d6: 6f 93 push r22
31d8: 7f 93 push r23
31da: 8f 93 push r24
31dc: 9f 93 push r25
31de: af 93 push r26
31e0: bf 93 push r27
31e2: cf 93 push r28
31e4: df 93 push r29
31e6: ef 93 push r30
31e8: ff 93 push r31
31ea: 20 91 86 00 lds r18, 0x0086
31ee: 30 91 87 00 lds r19, 0x0087
31f2: 80 91 ce 01 lds r24, 0x01CE
31f6: 90 91 cf 01 lds r25, 0x01CF
31fa: 28 1b sub r18, r24
31fc: 39 0b sbc r19, r25
31fe: 80 91 86 00 lds r24, 0x0086
3202: 90 91 87 00 lds r25, 0x0087
3206: 90 93 cf 01 sts 0x01CF, r25
320a: 80 93 ce 01 sts 0x01CE, r24
320e: c9 01 movw r24, r18
3210: 8d 5d subi r24, 0xDD ; 221
3212: 95 40 sbci r25, 0x05 ; 5
3214: 83 56 subi r24, 0x63 ; 99
3216: 99 41 sbci r25, 0x19 ; 25
3218: 48 f4 brcc .+18 ; 0x322c <__vector_12+0x6c>
321a: 81 e0 ldi r24, 0x01 ; 1
321c: 90 e0 ldi r25, 0x00 ; 0
321e: 90 93 cd 01 sts 0x01CD, r25
3222: 80 93 cc 01 sts 0x01CC, r24
3226: 10 92 67 01 sts 0x0167, r1
322a: 54 c0 rjmp .+168 ; 0x32d4 <__vector_12+0x114>
322c: c0 91 cc 01 lds r28, 0x01CC
3230: d0 91 cd 01 lds r29, 0x01CD
3234: ca 30 cpi r28, 0x0A ; 10
3236: d1 05 cpc r29, r1
3238: 0c f0 brlt .+2 ; 0x323c <__vector_12+0x7c>
323a: 4c c0 rjmp .+152 ; 0x32d4 <__vector_12+0x114>
323c: c9 01 movw r24, r18
323e: 8b 5f subi r24, 0xFB ; 251
3240: 90 40 sbci r25, 0x00 ; 0
3242: 84 5b subi r24, 0xB4 ; 180
3244: 91 40 sbci r25, 0x01 ; 1
3246: 08 f0 brcs .+2 ; 0x324a <__vector_12+0x8a>
3248: 40 c0 rjmp .+128 ; 0x32ca <__vector_12+0x10a>
324a: a9 01 movw r20, r18
324c: 42 5d subi r20, 0xD2 ; 210
324e: 51 40 sbci r21, 0x01 ; 1
3250: fe 01 movw r30, r28
3252: ee 0f add r30, r30
3254: ff 1f adc r31, r31
3256: e8 55 subi r30, 0x58 ; 88
3258: fb 4f sbci r31, 0xFB ; 251
325a: 80 81 ld r24, Z
325c: 91 81 ldd r25, Z+1 ; 0x01
325e: fa 01 movw r30, r20
3260: e8 1b sub r30, r24
3262: f9 0b sbc r31, r25
3264: cf 01 movw r24, r30
3266: f7 ff sbrs r31, 7
3268: 03 c0 rjmp .+6 ; 0x3270 <__vector_12+0xb0>
326a: 90 95 com r25
326c: 81 95 neg r24
326e: 9f 4f sbci r25, 0xFF ; 255
3270: 06 97 sbiw r24, 0x06 ; 6
3272: 4c f4 brge .+18 ; 0x3286 <__vector_12+0xc6>
3274: 80 91 18 02 lds r24, 0x0218
3278: 88 3c cpi r24, 0xC8 ; 200
327a: 28 f4 brcc .+10 ; 0x3286 <__vector_12+0xc6>
327c: 80 91 18 02 lds r24, 0x0218
3280: 86 5f subi r24, 0xF6 ; 246
3282: 80 93 18 02 sts 0x0218, r24
3286: fe 01 movw r30, r28
3288: ee 0f add r30, r30
328a: ff 1f adc r31, r31
328c: 8f 01 movw r16, r30
328e: 08 55 subi r16, 0x58 ; 88
3290: 1b 4f sbci r17, 0xFB ; 251
3292: d8 01 movw r26, r16
3294: 2d 91 ld r18, X+
3296: 3c 91 ld r19, X
3298: c9 01 movw r24, r18
329a: 88 0f add r24, r24
329c: 99 1f adc r25, r25
329e: 82 0f add r24, r18
32a0: 93 1f adc r25, r19
32a2: 84 0f add r24, r20
32a4: 95 1f adc r25, r21
32a6: 64 e0 ldi r22, 0x04 ; 4
32a8: 70 e0 ldi r23, 0x00 ; 0
32aa: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
32ae: d8 01 movw r26, r16
32b0: 8d 91 ld r24, X+
32b2: 9c 91 ld r25, X
32b4: 11 97 sbiw r26, 0x01 ; 1
32b6: 9b 01 movw r18, r22
32b8: 28 1b sub r18, r24
32ba: 39 0b sbc r19, r25
32bc: e2 54 subi r30, 0x42 ; 66
32be: fb 4f sbci r31, 0xFB ; 251
32c0: 31 83 std Z+1, r19 ; 0x01
32c2: 20 83 st Z, r18
32c4: 11 96 adiw r26, 0x01 ; 1
32c6: 7c 93 st X, r23
32c8: 6e 93 st -X, r22
32ca: 21 96 adiw r28, 0x01 ; 1
32cc: d0 93 cd 01 sts 0x01CD, r29
32d0: c0 93 cc 01 sts 0x01CC, r28
32d4: ff 91 pop r31
32d6: ef 91 pop r30
32d8: df 91 pop r29
32da: cf 91 pop r28
32dc: bf 91 pop r27
32de: af 91 pop r26
32e0: 9f 91 pop r25
32e2: 8f 91 pop r24
32e4: 7f 91 pop r23
32e6: 6f 91 pop r22
32e8: 5f 91 pop r21
32ea: 4f 91 pop r20
32ec: 3f 91 pop r19
32ee: 2f 91 pop r18
32f0: 1f 91 pop r17
32f2: 0f 91 pop r16
32f4: 0f 90 pop r0
32f6: 0f be out 0x3f, r0 ; 63
32f8: 0f 90 pop r0
32fa: 1f 90 pop r1
32fc: 18 95 reti
 
000032fe <Mittelwert>:
32fe: af 92 push r10
3300: bf 92 push r11
3302: cf 92 push r12
3304: df 92 push r13
3306: ef 92 push r14
3308: ff 92 push r15
330a: 0f 93 push r16
330c: 1f 93 push r17
330e: 10 92 7a 00 sts 0x007A, r1
3312: 80 91 b7 01 lds r24, 0x01B7
3316: 88 23 and r24, r24
3318: 69 f0 breq .+26 ; 0x3334 <Mittelwert+0x36>
331a: 80 91 ab 01 lds r24, 0x01AB
331e: 90 91 ac 01 lds r25, 0x01AC
3322: 60 91 b7 01 lds r22, 0x01B7
3326: 77 27 eor r23, r23
3328: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
332c: 70 93 11 05 sts 0x0511, r23
3330: 60 93 10 05 sts 0x0510, r22
3334: 80 91 b8 01 lds r24, 0x01B8
3338: 88 23 and r24, r24
333a: 69 f0 breq .+26 ; 0x3356 <Mittelwert+0x58>
333c: 80 91 ad 01 lds r24, 0x01AD
3340: 90 91 ae 01 lds r25, 0x01AE
3344: 60 91 b8 01 lds r22, 0x01B8
3348: 77 27 eor r23, r23
334a: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
334e: 70 93 0f 05 sts 0x050F, r23
3352: 60 93 0e 05 sts 0x050E, r22
3356: 80 91 b9 01 lds r24, 0x01B9
335a: 88 23 and r24, r24
335c: 69 f0 breq .+26 ; 0x3378 <Mittelwert+0x7a>
335e: 80 91 af 01 lds r24, 0x01AF
3362: 90 91 b0 01 lds r25, 0x01B0
3366: 60 91 b9 01 lds r22, 0x01B9
336a: 77 27 eor r23, r23
336c: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
3370: 70 93 25 05 sts 0x0525, r23
3374: 60 93 24 05 sts 0x0524, r22
3378: 80 91 ba 01 lds r24, 0x01BA
337c: 88 23 and r24, r24
337e: d9 f1 breq .+118 ; 0x33f6 <Mittelwert+0xf8>
3380: 60 91 b3 01 lds r22, 0x01B3
3384: 70 91 b4 01 lds r23, 0x01B4
3388: 20 91 ba 01 lds r18, 0x01BA
338c: e0 90 21 05 lds r14, 0x0521
3390: f0 90 22 05 lds r15, 0x0522
3394: 00 27 eor r16, r16
3396: f7 fc sbrc r15, 7
3398: 00 95 com r16
339a: 10 2f mov r17, r16
339c: 57 01 movw r10, r14
339e: 68 01 movw r12, r16
33a0: 83 e0 ldi r24, 0x03 ; 3
33a2: aa 0c add r10, r10
33a4: bb 1c adc r11, r11
33a6: cc 1c adc r12, r12
33a8: dd 1c adc r13, r13
33aa: 8a 95 dec r24
33ac: d1 f7 brne .-12 ; 0x33a2 <Mittelwert+0xa4>
33ae: ae 18 sub r10, r14
33b0: bf 08 sbc r11, r15
33b2: c0 0a sbc r12, r16
33b4: d1 0a sbc r13, r17
33b6: 88 27 eor r24, r24
33b8: 77 fd sbrc r23, 7
33ba: 80 95 com r24
33bc: 98 2f mov r25, r24
33be: b4 e0 ldi r27, 0x04 ; 4
33c0: 66 0f add r22, r22
33c2: 77 1f adc r23, r23
33c4: 88 1f adc r24, r24
33c6: 99 1f adc r25, r25
33c8: ba 95 dec r27
33ca: d1 f7 brne .-12 ; 0x33c0 <Mittelwert+0xc2>
33cc: 33 27 eor r19, r19
33ce: 44 27 eor r20, r20
33d0: 55 27 eor r21, r21
33d2: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
33d6: a2 0e add r10, r18
33d8: b3 1e adc r11, r19
33da: c4 1e adc r12, r20
33dc: d5 1e adc r13, r21
33de: c6 01 movw r24, r12
33e0: b5 01 movw r22, r10
33e2: 28 e0 ldi r18, 0x08 ; 8
33e4: 30 e0 ldi r19, 0x00 ; 0
33e6: 40 e0 ldi r20, 0x00 ; 0
33e8: 50 e0 ldi r21, 0x00 ; 0
33ea: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
33ee: 30 93 22 05 sts 0x0522, r19
33f2: 20 93 21 05 sts 0x0521, r18
33f6: 80 91 bb 01 lds r24, 0x01BB
33fa: 88 23 and r24, r24
33fc: d9 f1 breq .+118 ; 0x3474 <Mittelwert+0x176>
33fe: 60 91 b1 01 lds r22, 0x01B1
3402: 70 91 b2 01 lds r23, 0x01B2
3406: 20 91 bb 01 lds r18, 0x01BB
340a: e0 90 2a 05 lds r14, 0x052A
340e: f0 90 2b 05 lds r15, 0x052B
3412: 00 27 eor r16, r16
3414: f7 fc sbrc r15, 7
3416: 00 95 com r16
3418: 10 2f mov r17, r16
341a: 57 01 movw r10, r14
341c: 68 01 movw r12, r16
341e: a3 e0 ldi r26, 0x03 ; 3
3420: aa 0c add r10, r10
3422: bb 1c adc r11, r11
3424: cc 1c adc r12, r12
3426: dd 1c adc r13, r13
3428: aa 95 dec r26
342a: d1 f7 brne .-12 ; 0x3420 <Mittelwert+0x122>
342c: ae 18 sub r10, r14
342e: bf 08 sbc r11, r15
3430: c0 0a sbc r12, r16
3432: d1 0a sbc r13, r17
3434: 88 27 eor r24, r24
3436: 77 fd sbrc r23, 7
3438: 80 95 com r24
343a: 98 2f mov r25, r24
343c: f4 e0 ldi r31, 0x04 ; 4
343e: 66 0f add r22, r22
3440: 77 1f adc r23, r23
3442: 88 1f adc r24, r24
3444: 99 1f adc r25, r25
3446: fa 95 dec r31
3448: d1 f7 brne .-12 ; 0x343e <Mittelwert+0x140>
344a: 33 27 eor r19, r19
344c: 44 27 eor r20, r20
344e: 55 27 eor r21, r21
3450: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
3454: a2 0e add r10, r18
3456: b3 1e adc r11, r19
3458: c4 1e adc r12, r20
345a: d5 1e adc r13, r21
345c: c6 01 movw r24, r12
345e: b5 01 movw r22, r10
3460: 28 e0 ldi r18, 0x08 ; 8
3462: 30 e0 ldi r19, 0x00 ; 0
3464: 40 e0 ldi r20, 0x00 ; 0
3466: 50 e0 ldi r21, 0x00 ; 0
3468: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
346c: 30 93 2b 05 sts 0x052B, r19
3470: 20 93 2a 05 sts 0x052A, r18
3474: 80 91 bc 01 lds r24, 0x01BC
3478: 88 23 and r24, r24
347a: a1 f1 breq .+104 ; 0x34e4 <Mittelwert+0x1e6>
347c: 60 91 b5 01 lds r22, 0x01B5
3480: 70 91 b6 01 lds r23, 0x01B6
3484: 20 91 bc 01 lds r18, 0x01BC
3488: e0 90 13 05 lds r14, 0x0513
348c: f0 90 14 05 lds r15, 0x0514
3490: 00 27 eor r16, r16
3492: f7 fc sbrc r15, 7
3494: 00 95 com r16
3496: 10 2f mov r17, r16
3498: 57 01 movw r10, r14
349a: 68 01 movw r12, r16
349c: e3 e0 ldi r30, 0x03 ; 3
349e: aa 0c add r10, r10
34a0: bb 1c adc r11, r11
34a2: cc 1c adc r12, r12
34a4: dd 1c adc r13, r13
34a6: ea 95 dec r30
34a8: d1 f7 brne .-12 ; 0x349e <Mittelwert+0x1a0>
34aa: ae 18 sub r10, r14
34ac: bf 08 sbc r11, r15
34ae: c0 0a sbc r12, r16
34b0: d1 0a sbc r13, r17
34b2: 88 27 eor r24, r24
34b4: 77 fd sbrc r23, 7
34b6: 80 95 com r24
34b8: 98 2f mov r25, r24
34ba: 33 27 eor r19, r19
34bc: 44 27 eor r20, r20
34be: 55 27 eor r21, r21
34c0: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
34c4: a2 0e add r10, r18
34c6: b3 1e adc r11, r19
34c8: c4 1e adc r12, r20
34ca: d5 1e adc r13, r21
34cc: c6 01 movw r24, r12
34ce: b5 01 movw r22, r10
34d0: 28 e0 ldi r18, 0x08 ; 8
34d2: 30 e0 ldi r19, 0x00 ; 0
34d4: 40 e0 ldi r20, 0x00 ; 0
34d6: 50 e0 ldi r21, 0x00 ; 0
34d8: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
34dc: 30 93 14 05 sts 0x0514, r19
34e0: 20 93 13 05 sts 0x0513, r18
34e4: 10 92 ac 01 sts 0x01AC, r1
34e8: 10 92 ab 01 sts 0x01AB, r1
34ec: 10 92 b7 01 sts 0x01B7, r1
34f0: 10 92 ae 01 sts 0x01AE, r1
34f4: 10 92 ad 01 sts 0x01AD, r1
34f8: 10 92 b8 01 sts 0x01B8, r1
34fc: 10 92 b0 01 sts 0x01B0, r1
3500: 10 92 af 01 sts 0x01AF, r1
3504: 10 92 b9 01 sts 0x01B9, r1
3508: 10 92 b2 01 sts 0x01B2, r1
350c: 10 92 b1 01 sts 0x01B1, r1
3510: 10 92 bb 01 sts 0x01BB, r1
3514: 10 92 b4 01 sts 0x01B4, r1
3518: 10 92 b3 01 sts 0x01B3, r1
351c: 10 92 ba 01 sts 0x01BA, r1
3520: 10 92 b6 01 sts 0x01B6, r1
3524: 10 92 b5 01 sts 0x01B5, r1
3528: 10 92 bc 01 sts 0x01BC, r1
352c: 80 91 fb 01 lds r24, 0x01FB
3530: 90 91 fc 01 lds r25, 0x01FC
3534: a0 91 fd 01 lds r26, 0x01FD
3538: b0 91 fe 01 lds r27, 0x01FE
353c: 80 93 e7 01 sts 0x01E7, r24
3540: 90 93 e8 01 sts 0x01E8, r25
3544: a0 93 e9 01 sts 0x01E9, r26
3548: b0 93 ea 01 sts 0x01EA, r27
354c: 80 91 eb 01 lds r24, 0x01EB
3550: 90 91 ec 01 lds r25, 0x01EC
3554: a0 91 ed 01 lds r26, 0x01ED
3558: b0 91 ee 01 lds r27, 0x01EE
355c: 80 93 d7 01 sts 0x01D7, r24
3560: 90 93 d8 01 sts 0x01D8, r25
3564: a0 93 d9 01 sts 0x01D9, r26
3568: b0 93 da 01 sts 0x01DA, r27
356c: 80 91 f3 01 lds r24, 0x01F3
3570: 90 91 f4 01 lds r25, 0x01F4
3574: a0 91 f5 01 lds r26, 0x01F5
3578: b0 91 f6 01 lds r27, 0x01F6
357c: 80 93 df 01 sts 0x01DF, r24
3580: 90 93 e0 01 sts 0x01E0, r25
3584: a0 93 e1 01 sts 0x01E1, r26
3588: b0 93 e2 01 sts 0x01E2, r27
358c: 80 91 ef 01 lds r24, 0x01EF
3590: 90 91 f0 01 lds r25, 0x01F0
3594: a0 91 f1 01 lds r26, 0x01F1
3598: b0 91 f2 01 lds r27, 0x01F2
359c: 80 93 db 01 sts 0x01DB, r24
35a0: 90 93 dc 01 sts 0x01DC, r25
35a4: a0 93 dd 01 sts 0x01DD, r26
35a8: b0 93 de 01 sts 0x01DE, r27
35ac: 80 91 f7 01 lds r24, 0x01F7
35b0: 90 91 f8 01 lds r25, 0x01F8
35b4: a0 91 f9 01 lds r26, 0x01F9
35b8: b0 91 fa 01 lds r27, 0x01FA
35bc: 80 93 e3 01 sts 0x01E3, r24
35c0: 90 93 e4 01 sts 0x01E4, r25
35c4: a0 93 e5 01 sts 0x01E5, r26
35c8: b0 93 e6 01 sts 0x01E6, r27
35cc: 8f ec ldi r24, 0xCF ; 207
35ce: 80 93 7a 00 sts 0x007A, r24
35d2: 20 91 10 02 lds r18, 0x0210
35d6: 30 91 11 02 lds r19, 0x0211
35da: 80 91 d8 04 lds r24, 0x04D8
35de: e8 2f mov r30, r24
35e0: ff 27 eor r31, r31
35e2: ee 0f add r30, r30
35e4: ff 1f adc r31, r31
35e6: e8 55 subi r30, 0x58 ; 88
35e8: fb 4f sbci r31, 0xFB ; 251
35ea: 80 81 ld r24, Z
35ec: 91 81 ldd r25, Z+1 ; 0x01
35ee: 82 59 subi r24, 0x92 ; 146
35f0: 9f 4f sbci r25, 0xFF ; 255
35f2: 28 17 cp r18, r24
35f4: 39 07 cpc r19, r25
35f6: 1c f4 brge .+6 ; 0x35fe <Mittelwert+0x300>
35f8: 2f 5f subi r18, 0xFF ; 255
35fa: 3f 4f sbci r19, 0xFF ; 255
35fc: 0c c0 rjmp .+24 ; 0x3616 <Mittelwert+0x318>
35fe: 80 81 ld r24, Z
3600: 91 81 ldd r25, Z+1 ; 0x01
3602: 82 59 subi r24, 0x92 ; 146
3604: 9f 4f sbci r25, 0xFF ; 255
3606: 82 17 cp r24, r18
3608: 93 07 cpc r25, r19
360a: 4c f4 brge .+18 ; 0x361e <Mittelwert+0x320>
360c: 21 15 cp r18, r1
360e: 31 05 cpc r19, r1
3610: 31 f0 breq .+12 ; 0x361e <Mittelwert+0x320>
3612: 21 50 subi r18, 0x01 ; 1
3614: 30 40 sbci r19, 0x00 ; 0
3616: 30 93 11 02 sts 0x0211, r19
361a: 20 93 10 02 sts 0x0210, r18
361e: 20 91 12 02 lds r18, 0x0212
3622: 30 91 13 02 lds r19, 0x0213
3626: 80 91 d9 04 lds r24, 0x04D9
362a: e8 2f mov r30, r24
362c: ff 27 eor r31, r31
362e: ee 0f add r30, r30
3630: ff 1f adc r31, r31
3632: e8 55 subi r30, 0x58 ; 88
3634: fb 4f sbci r31, 0xFB ; 251
3636: 80 81 ld r24, Z
3638: 91 81 ldd r25, Z+1 ; 0x01
363a: 82 59 subi r24, 0x92 ; 146
363c: 9f 4f sbci r25, 0xFF ; 255
363e: 28 17 cp r18, r24
3640: 39 07 cpc r19, r25
3642: 1c f4 brge .+6 ; 0x364a <Mittelwert+0x34c>
3644: 2f 5f subi r18, 0xFF ; 255
3646: 3f 4f sbci r19, 0xFF ; 255
3648: 0c c0 rjmp .+24 ; 0x3662 <Mittelwert+0x364>
364a: 80 81 ld r24, Z
364c: 91 81 ldd r25, Z+1 ; 0x01
364e: 82 59 subi r24, 0x92 ; 146
3650: 9f 4f sbci r25, 0xFF ; 255
3652: 82 17 cp r24, r18
3654: 93 07 cpc r25, r19
3656: 4c f4 brge .+18 ; 0x366a <Mittelwert+0x36c>
3658: 21 15 cp r18, r1
365a: 31 05 cpc r19, r1
365c: 31 f0 breq .+12 ; 0x366a <Mittelwert+0x36c>
365e: 21 50 subi r18, 0x01 ; 1
3660: 30 40 sbci r19, 0x00 ; 0
3662: 30 93 13 02 sts 0x0213, r19
3666: 20 93 12 02 sts 0x0212, r18
366a: 20 91 14 02 lds r18, 0x0214
366e: 30 91 15 02 lds r19, 0x0215
3672: 80 91 da 04 lds r24, 0x04DA
3676: e8 2f mov r30, r24
3678: ff 27 eor r31, r31
367a: ee 0f add r30, r30
367c: ff 1f adc r31, r31
367e: e8 55 subi r30, 0x58 ; 88
3680: fb 4f sbci r31, 0xFB ; 251
3682: 80 81 ld r24, Z
3684: 91 81 ldd r25, Z+1 ; 0x01
3686: 82 59 subi r24, 0x92 ; 146
3688: 9f 4f sbci r25, 0xFF ; 255
368a: 28 17 cp r18, r24
368c: 39 07 cpc r19, r25
368e: 1c f4 brge .+6 ; 0x3696 <Mittelwert+0x398>
3690: 2f 5f subi r18, 0xFF ; 255
3692: 3f 4f sbci r19, 0xFF ; 255
3694: 0c c0 rjmp .+24 ; 0x36ae <Mittelwert+0x3b0>
3696: 80 81 ld r24, Z
3698: 91 81 ldd r25, Z+1 ; 0x01
369a: 82 59 subi r24, 0x92 ; 146
369c: 9f 4f sbci r25, 0xFF ; 255
369e: 82 17 cp r24, r18
36a0: 93 07 cpc r25, r19
36a2: 4c f4 brge .+18 ; 0x36b6 <Mittelwert+0x3b8>
36a4: 21 15 cp r18, r1
36a6: 31 05 cpc r19, r1
36a8: 31 f0 breq .+12 ; 0x36b6 <Mittelwert+0x3b8>
36aa: 21 50 subi r18, 0x01 ; 1
36ac: 30 40 sbci r19, 0x00 ; 0
36ae: 30 93 15 02 sts 0x0215, r19
36b2: 20 93 14 02 sts 0x0214, r18
36b6: 20 91 16 02 lds r18, 0x0216
36ba: 30 91 17 02 lds r19, 0x0217
36be: 80 91 db 04 lds r24, 0x04DB
36c2: e8 2f mov r30, r24
36c4: ff 27 eor r31, r31
36c6: ee 0f add r30, r30
36c8: ff 1f adc r31, r31
36ca: e8 55 subi r30, 0x58 ; 88
36cc: fb 4f sbci r31, 0xFB ; 251
36ce: 80 81 ld r24, Z
36d0: 91 81 ldd r25, Z+1 ; 0x01
36d2: 82 59 subi r24, 0x92 ; 146
36d4: 9f 4f sbci r25, 0xFF ; 255
36d6: 28 17 cp r18, r24
36d8: 39 07 cpc r19, r25
36da: 1c f4 brge .+6 ; 0x36e2 <Mittelwert+0x3e4>
36dc: 2f 5f subi r18, 0xFF ; 255
36de: 3f 4f sbci r19, 0xFF ; 255
36e0: 0c c0 rjmp .+24 ; 0x36fa <Mittelwert+0x3fc>
36e2: 80 81 ld r24, Z
36e4: 91 81 ldd r25, Z+1 ; 0x01
36e6: 82 59 subi r24, 0x92 ; 146
36e8: 9f 4f sbci r25, 0xFF ; 255
36ea: 82 17 cp r24, r18
36ec: 93 07 cpc r25, r19
36ee: 4c f4 brge .+18 ; 0x3702 <Mittelwert+0x404>
36f0: 21 15 cp r18, r1
36f2: 31 05 cpc r19, r1
36f4: 31 f0 breq .+12 ; 0x3702 <Mittelwert+0x404>
36f6: 21 50 subi r18, 0x01 ; 1
36f8: 30 40 sbci r19, 0x00 ; 0
36fa: 30 93 17 02 sts 0x0217, r19
36fe: 20 93 16 02 sts 0x0216, r18
3702: 80 91 10 02 lds r24, 0x0210
3706: 90 91 11 02 lds r25, 0x0211
370a: 97 ff sbrs r25, 7
370c: 05 c0 rjmp .+10 ; 0x3718 <Mittelwert+0x41a>
370e: 10 92 11 02 sts 0x0211, r1
3712: 10 92 10 02 sts 0x0210, r1
3716: 0a c0 rjmp .+20 ; 0x372c <Mittelwert+0x42e>
3718: 8f 3f cpi r24, 0xFF ; 255
371a: 91 05 cpc r25, r1
371c: 39 f0 breq .+14 ; 0x372c <Mittelwert+0x42e>
371e: 34 f0 brlt .+12 ; 0x372c <Mittelwert+0x42e>
3720: 8f ef ldi r24, 0xFF ; 255
3722: 90 e0 ldi r25, 0x00 ; 0
3724: 90 93 11 02 sts 0x0211, r25
3728: 80 93 10 02 sts 0x0210, r24
372c: 80 91 12 02 lds r24, 0x0212
3730: 90 91 13 02 lds r25, 0x0213
3734: 97 ff sbrs r25, 7
3736: 05 c0 rjmp .+10 ; 0x3742 <Mittelwert+0x444>
3738: 10 92 13 02 sts 0x0213, r1
373c: 10 92 12 02 sts 0x0212, r1
3740: 0a c0 rjmp .+20 ; 0x3756 <Mittelwert+0x458>
3742: 8f 3f cpi r24, 0xFF ; 255
3744: 91 05 cpc r25, r1
3746: 39 f0 breq .+14 ; 0x3756 <Mittelwert+0x458>
3748: 34 f0 brlt .+12 ; 0x3756 <Mittelwert+0x458>
374a: 8f ef ldi r24, 0xFF ; 255
374c: 90 e0 ldi r25, 0x00 ; 0
374e: 90 93 13 02 sts 0x0213, r25
3752: 80 93 12 02 sts 0x0212, r24
3756: 80 91 14 02 lds r24, 0x0214
375a: 90 91 15 02 lds r25, 0x0215
375e: 97 ff sbrs r25, 7
3760: 05 c0 rjmp .+10 ; 0x376c <Mittelwert+0x46e>
3762: 10 92 15 02 sts 0x0215, r1
3766: 10 92 14 02 sts 0x0214, r1
376a: 0a c0 rjmp .+20 ; 0x3780 <Mittelwert+0x482>
376c: 8f 3f cpi r24, 0xFF ; 255
376e: 91 05 cpc r25, r1
3770: 39 f0 breq .+14 ; 0x3780 <Mittelwert+0x482>
3772: 34 f0 brlt .+12 ; 0x3780 <Mittelwert+0x482>
3774: 8f ef ldi r24, 0xFF ; 255
3776: 90 e0 ldi r25, 0x00 ; 0
3778: 90 93 15 02 sts 0x0215, r25
377c: 80 93 14 02 sts 0x0214, r24
3780: 80 91 16 02 lds r24, 0x0216
3784: 90 91 17 02 lds r25, 0x0217
3788: 97 ff sbrs r25, 7
378a: 05 c0 rjmp .+10 ; 0x3796 <Mittelwert+0x498>
378c: 10 92 17 02 sts 0x0217, r1
3790: 10 92 16 02 sts 0x0216, r1
3794: 0a c0 rjmp .+20 ; 0x37aa <Mittelwert+0x4ac>
3796: 8f 3f cpi r24, 0xFF ; 255
3798: 91 05 cpc r25, r1
379a: 39 f0 breq .+14 ; 0x37aa <Mittelwert+0x4ac>
379c: 34 f0 brlt .+12 ; 0x37aa <Mittelwert+0x4ac>
379e: 8f ef ldi r24, 0xFF ; 255
37a0: 90 e0 ldi r25, 0x00 ; 0
37a2: 90 93 17 02 sts 0x0217, r25
37a6: 80 93 16 02 sts 0x0216, r24
37aa: 1f 91 pop r17
37ac: 0f 91 pop r16
37ae: ff 90 pop r15
37b0: ef 90 pop r14
37b2: df 90 pop r13
37b4: cf 90 pop r12
37b6: bf 90 pop r11
37b8: af 90 pop r10
37ba: 08 95 ret
 
000037bc <CalibrierMittelwert>:
37bc: 10 92 7a 00 sts 0x007A, r1
37c0: 80 91 b7 01 lds r24, 0x01B7
37c4: 88 23 and r24, r24
37c6: 69 f0 breq .+26 ; 0x37e2 <CalibrierMittelwert+0x26>
37c8: 80 91 ab 01 lds r24, 0x01AB
37cc: 90 91 ac 01 lds r25, 0x01AC
37d0: 60 91 b7 01 lds r22, 0x01B7
37d4: 77 27 eor r23, r23
37d6: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
37da: 70 93 11 05 sts 0x0511, r23
37de: 60 93 10 05 sts 0x0510, r22
37e2: 80 91 b8 01 lds r24, 0x01B8
37e6: 88 23 and r24, r24
37e8: 69 f0 breq .+26 ; 0x3804 <CalibrierMittelwert+0x48>
37ea: 80 91 ad 01 lds r24, 0x01AD
37ee: 90 91 ae 01 lds r25, 0x01AE
37f2: 60 91 b8 01 lds r22, 0x01B8
37f6: 77 27 eor r23, r23
37f8: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
37fc: 70 93 0f 05 sts 0x050F, r23
3800: 60 93 0e 05 sts 0x050E, r22
3804: 80 91 b9 01 lds r24, 0x01B9
3808: 88 23 and r24, r24
380a: 69 f0 breq .+26 ; 0x3826 <CalibrierMittelwert+0x6a>
380c: 80 91 af 01 lds r24, 0x01AF
3810: 90 91 b0 01 lds r25, 0x01B0
3814: 60 91 b9 01 lds r22, 0x01B9
3818: 77 27 eor r23, r23
381a: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
381e: 70 93 25 05 sts 0x0525, r23
3822: 60 93 24 05 sts 0x0524, r22
3826: 80 91 ba 01 lds r24, 0x01BA
382a: 88 23 and r24, r24
382c: d1 f0 breq .+52 ; 0x3862 <CalibrierMittelwert+0xa6>
382e: 60 91 b3 01 lds r22, 0x01B3
3832: 70 91 b4 01 lds r23, 0x01B4
3836: 20 91 ba 01 lds r18, 0x01BA
383a: 88 27 eor r24, r24
383c: 77 fd sbrc r23, 7
383e: 80 95 com r24
3840: 98 2f mov r25, r24
3842: f4 e0 ldi r31, 0x04 ; 4
3844: 66 0f add r22, r22
3846: 77 1f adc r23, r23
3848: 88 1f adc r24, r24
384a: 99 1f adc r25, r25
384c: fa 95 dec r31
384e: d1 f7 brne .-12 ; 0x3844 <CalibrierMittelwert+0x88>
3850: 33 27 eor r19, r19
3852: 44 27 eor r20, r20
3854: 55 27 eor r21, r21
3856: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
385a: 30 93 22 05 sts 0x0522, r19
385e: 20 93 21 05 sts 0x0521, r18
3862: 80 91 bb 01 lds r24, 0x01BB
3866: 88 23 and r24, r24
3868: d1 f0 breq .+52 ; 0x389e <CalibrierMittelwert+0xe2>
386a: 60 91 b1 01 lds r22, 0x01B1
386e: 70 91 b2 01 lds r23, 0x01B2
3872: 20 91 bb 01 lds r18, 0x01BB
3876: 88 27 eor r24, r24
3878: 77 fd sbrc r23, 7
387a: 80 95 com r24
387c: 98 2f mov r25, r24
387e: e4 e0 ldi r30, 0x04 ; 4
3880: 66 0f add r22, r22
3882: 77 1f adc r23, r23
3884: 88 1f adc r24, r24
3886: 99 1f adc r25, r25
3888: ea 95 dec r30
388a: d1 f7 brne .-12 ; 0x3880 <CalibrierMittelwert+0xc4>
388c: 33 27 eor r19, r19
388e: 44 27 eor r20, r20
3890: 55 27 eor r21, r21
3892: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
3896: 30 93 2b 05 sts 0x052B, r19
389a: 20 93 2a 05 sts 0x052A, r18
389e: 80 91 bc 01 lds r24, 0x01BC
38a2: 88 23 and r24, r24
38a4: 99 f0 breq .+38 ; 0x38cc <CalibrierMittelwert+0x110>
38a6: 60 91 b5 01 lds r22, 0x01B5
38aa: 70 91 b6 01 lds r23, 0x01B6
38ae: 20 91 bc 01 lds r18, 0x01BC
38b2: 88 27 eor r24, r24
38b4: 77 fd sbrc r23, 7
38b6: 80 95 com r24
38b8: 98 2f mov r25, r24
38ba: 33 27 eor r19, r19
38bc: 44 27 eor r20, r20
38be: 55 27 eor r21, r21
38c0: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
38c4: 30 93 14 05 sts 0x0514, r19
38c8: 20 93 13 05 sts 0x0513, r18
38cc: 10 92 ac 01 sts 0x01AC, r1
38d0: 10 92 ab 01 sts 0x01AB, r1
38d4: 10 92 b7 01 sts 0x01B7, r1
38d8: 10 92 ae 01 sts 0x01AE, r1
38dc: 10 92 ad 01 sts 0x01AD, r1
38e0: 10 92 b8 01 sts 0x01B8, r1
38e4: 10 92 b0 01 sts 0x01B0, r1
38e8: 10 92 af 01 sts 0x01AF, r1
38ec: 10 92 b9 01 sts 0x01B9, r1
38f0: 10 92 b2 01 sts 0x01B2, r1
38f4: 10 92 b1 01 sts 0x01B1, r1
38f8: 10 92 bb 01 sts 0x01BB, r1
38fc: 10 92 b4 01 sts 0x01B4, r1
3900: 10 92 b3 01 sts 0x01B3, r1
3904: 10 92 ba 01 sts 0x01BA, r1
3908: 10 92 b6 01 sts 0x01B6, r1
390c: 10 92 b5 01 sts 0x01B5, r1
3910: 10 92 bc 01 sts 0x01BC, r1
3914: 8f ec ldi r24, 0xCF ; 207
3916: 80 93 7a 00 sts 0x007A, r24
391a: 20 91 10 02 lds r18, 0x0210
391e: 30 91 11 02 lds r19, 0x0211
3922: 80 91 d8 04 lds r24, 0x04D8
3926: e8 2f mov r30, r24
3928: ff 27 eor r31, r31
392a: ee 0f add r30, r30
392c: ff 1f adc r31, r31
392e: e8 55 subi r30, 0x58 ; 88
3930: fb 4f sbci r31, 0xFB ; 251
3932: 80 81 ld r24, Z
3934: 91 81 ldd r25, Z+1 ; 0x01
3936: 82 59 subi r24, 0x92 ; 146
3938: 9f 4f sbci r25, 0xFF ; 255
393a: 28 17 cp r18, r24
393c: 39 07 cpc r19, r25
393e: 1c f4 brge .+6 ; 0x3946 <CalibrierMittelwert+0x18a>
3940: 2f 5f subi r18, 0xFF ; 255
3942: 3f 4f sbci r19, 0xFF ; 255
3944: 0c c0 rjmp .+24 ; 0x395e <CalibrierMittelwert+0x1a2>
3946: 80 81 ld r24, Z
3948: 91 81 ldd r25, Z+1 ; 0x01
394a: 82 59 subi r24, 0x92 ; 146
394c: 9f 4f sbci r25, 0xFF ; 255
394e: 82 17 cp r24, r18
3950: 93 07 cpc r25, r19
3952: 4c f4 brge .+18 ; 0x3966 <CalibrierMittelwert+0x1aa>
3954: 21 15 cp r18, r1
3956: 31 05 cpc r19, r1
3958: 31 f0 breq .+12 ; 0x3966 <CalibrierMittelwert+0x1aa>
395a: 21 50 subi r18, 0x01 ; 1
395c: 30 40 sbci r19, 0x00 ; 0
395e: 30 93 11 02 sts 0x0211, r19
3962: 20 93 10 02 sts 0x0210, r18
3966: 20 91 12 02 lds r18, 0x0212
396a: 30 91 13 02 lds r19, 0x0213
396e: 80 91 d9 04 lds r24, 0x04D9
3972: e8 2f mov r30, r24
3974: ff 27 eor r31, r31
3976: ee 0f add r30, r30
3978: ff 1f adc r31, r31
397a: e8 55 subi r30, 0x58 ; 88
397c: fb 4f sbci r31, 0xFB ; 251
397e: 80 81 ld r24, Z
3980: 91 81 ldd r25, Z+1 ; 0x01
3982: 82 59 subi r24, 0x92 ; 146
3984: 9f 4f sbci r25, 0xFF ; 255
3986: 28 17 cp r18, r24
3988: 39 07 cpc r19, r25
398a: 1c f4 brge .+6 ; 0x3992 <CalibrierMittelwert+0x1d6>
398c: 2f 5f subi r18, 0xFF ; 255
398e: 3f 4f sbci r19, 0xFF ; 255
3990: 0c c0 rjmp .+24 ; 0x39aa <CalibrierMittelwert+0x1ee>
3992: 80 81 ld r24, Z
3994: 91 81 ldd r25, Z+1 ; 0x01
3996: 82 59 subi r24, 0x92 ; 146
3998: 9f 4f sbci r25, 0xFF ; 255
399a: 82 17 cp r24, r18
399c: 93 07 cpc r25, r19
399e: 4c f4 brge .+18 ; 0x39b2 <CalibrierMittelwert+0x1f6>
39a0: 21 15 cp r18, r1
39a2: 31 05 cpc r19, r1
39a4: 31 f0 breq .+12 ; 0x39b2 <CalibrierMittelwert+0x1f6>
39a6: 21 50 subi r18, 0x01 ; 1
39a8: 30 40 sbci r19, 0x00 ; 0
39aa: 30 93 13 02 sts 0x0213, r19
39ae: 20 93 12 02 sts 0x0212, r18
39b2: 20 91 14 02 lds r18, 0x0214
39b6: 30 91 15 02 lds r19, 0x0215
39ba: 80 91 da 04 lds r24, 0x04DA
39be: e8 2f mov r30, r24
39c0: ff 27 eor r31, r31
39c2: ee 0f add r30, r30
39c4: ff 1f adc r31, r31
39c6: e8 55 subi r30, 0x58 ; 88
39c8: fb 4f sbci r31, 0xFB ; 251
39ca: 80 81 ld r24, Z
39cc: 91 81 ldd r25, Z+1 ; 0x01
39ce: 82 59 subi r24, 0x92 ; 146
39d0: 9f 4f sbci r25, 0xFF ; 255
39d2: 28 17 cp r18, r24
39d4: 39 07 cpc r19, r25
39d6: 1c f4 brge .+6 ; 0x39de <CalibrierMittelwert+0x222>
39d8: 2f 5f subi r18, 0xFF ; 255
39da: 3f 4f sbci r19, 0xFF ; 255
39dc: 0c c0 rjmp .+24 ; 0x39f6 <CalibrierMittelwert+0x23a>
39de: 80 81 ld r24, Z
39e0: 91 81 ldd r25, Z+1 ; 0x01
39e2: 82 59 subi r24, 0x92 ; 146
39e4: 9f 4f sbci r25, 0xFF ; 255
39e6: 82 17 cp r24, r18
39e8: 93 07 cpc r25, r19
39ea: 4c f4 brge .+18 ; 0x39fe <CalibrierMittelwert+0x242>
39ec: 21 15 cp r18, r1
39ee: 31 05 cpc r19, r1
39f0: 31 f0 breq .+12 ; 0x39fe <CalibrierMittelwert+0x242>
39f2: 21 50 subi r18, 0x01 ; 1
39f4: 30 40 sbci r19, 0x00 ; 0
39f6: 30 93 15 02 sts 0x0215, r19
39fa: 20 93 14 02 sts 0x0214, r18
39fe: 20 91 16 02 lds r18, 0x0216
3a02: 30 91 17 02 lds r19, 0x0217
3a06: 80 91 db 04 lds r24, 0x04DB
3a0a: e8 2f mov r30, r24
3a0c: ff 27 eor r31, r31
3a0e: ee 0f add r30, r30
3a10: ff 1f adc r31, r31
3a12: e8 55 subi r30, 0x58 ; 88
3a14: fb 4f sbci r31, 0xFB ; 251
3a16: 80 81 ld r24, Z
3a18: 91 81 ldd r25, Z+1 ; 0x01
3a1a: 82 59 subi r24, 0x92 ; 146
3a1c: 9f 4f sbci r25, 0xFF ; 255
3a1e: 28 17 cp r18, r24
3a20: 39 07 cpc r19, r25
3a22: 1c f4 brge .+6 ; 0x3a2a <CalibrierMittelwert+0x26e>
3a24: 2f 5f subi r18, 0xFF ; 255
3a26: 3f 4f sbci r19, 0xFF ; 255
3a28: 0c c0 rjmp .+24 ; 0x3a42 <CalibrierMittelwert+0x286>
3a2a: 80 81 ld r24, Z
3a2c: 91 81 ldd r25, Z+1 ; 0x01
3a2e: 82 59 subi r24, 0x92 ; 146
3a30: 9f 4f sbci r25, 0xFF ; 255
3a32: 82 17 cp r24, r18
3a34: 93 07 cpc r25, r19
3a36: 4c f4 brge .+18 ; 0x3a4a <CalibrierMittelwert+0x28e>
3a38: 21 15 cp r18, r1
3a3a: 31 05 cpc r19, r1
3a3c: 31 f0 breq .+12 ; 0x3a4a <CalibrierMittelwert+0x28e>
3a3e: 21 50 subi r18, 0x01 ; 1
3a40: 30 40 sbci r19, 0x00 ; 0
3a42: 30 93 17 02 sts 0x0217, r19
3a46: 20 93 16 02 sts 0x0216, r18
3a4a: 80 91 10 02 lds r24, 0x0210
3a4e: 90 91 11 02 lds r25, 0x0211
3a52: 97 ff sbrs r25, 7
3a54: 05 c0 rjmp .+10 ; 0x3a60 <CalibrierMittelwert+0x2a4>
3a56: 10 92 11 02 sts 0x0211, r1
3a5a: 10 92 10 02 sts 0x0210, r1
3a5e: 0a c0 rjmp .+20 ; 0x3a74 <CalibrierMittelwert+0x2b8>
3a60: 8f 3f cpi r24, 0xFF ; 255
3a62: 91 05 cpc r25, r1
3a64: 39 f0 breq .+14 ; 0x3a74 <CalibrierMittelwert+0x2b8>
3a66: 34 f0 brlt .+12 ; 0x3a74 <CalibrierMittelwert+0x2b8>
3a68: 8f ef ldi r24, 0xFF ; 255
3a6a: 90 e0 ldi r25, 0x00 ; 0
3a6c: 90 93 11 02 sts 0x0211, r25
3a70: 80 93 10 02 sts 0x0210, r24
3a74: 80 91 12 02 lds r24, 0x0212
3a78: 90 91 13 02 lds r25, 0x0213
3a7c: 97 ff sbrs r25, 7
3a7e: 05 c0 rjmp .+10 ; 0x3a8a <CalibrierMittelwert+0x2ce>
3a80: 10 92 13 02 sts 0x0213, r1
3a84: 10 92 12 02 sts 0x0212, r1
3a88: 0a c0 rjmp .+20 ; 0x3a9e <CalibrierMittelwert+0x2e2>
3a8a: 8f 3f cpi r24, 0xFF ; 255
3a8c: 91 05 cpc r25, r1
3a8e: 39 f0 breq .+14 ; 0x3a9e <CalibrierMittelwert+0x2e2>
3a90: 34 f0 brlt .+12 ; 0x3a9e <CalibrierMittelwert+0x2e2>
3a92: 8f ef ldi r24, 0xFF ; 255
3a94: 90 e0 ldi r25, 0x00 ; 0
3a96: 90 93 13 02 sts 0x0213, r25
3a9a: 80 93 12 02 sts 0x0212, r24
3a9e: 80 91 14 02 lds r24, 0x0214
3aa2: 90 91 15 02 lds r25, 0x0215
3aa6: 97 ff sbrs r25, 7
3aa8: 05 c0 rjmp .+10 ; 0x3ab4 <CalibrierMittelwert+0x2f8>
3aaa: 10 92 15 02 sts 0x0215, r1
3aae: 10 92 14 02 sts 0x0214, r1
3ab2: 0a c0 rjmp .+20 ; 0x3ac8 <CalibrierMittelwert+0x30c>
3ab4: 8f 3f cpi r24, 0xFF ; 255
3ab6: 91 05 cpc r25, r1
3ab8: 39 f0 breq .+14 ; 0x3ac8 <CalibrierMittelwert+0x30c>
3aba: 34 f0 brlt .+12 ; 0x3ac8 <CalibrierMittelwert+0x30c>
3abc: 8f ef ldi r24, 0xFF ; 255
3abe: 90 e0 ldi r25, 0x00 ; 0
3ac0: 90 93 15 02 sts 0x0215, r25
3ac4: 80 93 14 02 sts 0x0214, r24
3ac8: 80 91 16 02 lds r24, 0x0216
3acc: 90 91 17 02 lds r25, 0x0217
3ad0: 97 ff sbrs r25, 7
3ad2: 05 c0 rjmp .+10 ; 0x3ade <CalibrierMittelwert+0x322>
3ad4: 10 92 17 02 sts 0x0217, r1
3ad8: 10 92 16 02 sts 0x0216, r1
3adc: 08 95 ret
3ade: 8f 3f cpi r24, 0xFF ; 255
3ae0: 91 05 cpc r25, r1
3ae2: 39 f0 breq .+14 ; 0x3af2 <CalibrierMittelwert+0x336>
3ae4: 34 f0 brlt .+12 ; 0x3af2 <CalibrierMittelwert+0x336>
3ae6: 8f ef ldi r24, 0xFF ; 255
3ae8: 90 e0 ldi r25, 0x00 ; 0
3aea: 90 93 17 02 sts 0x0217, r25
3aee: 80 93 16 02 sts 0x0216, r24
3af2: 08 95 ret
 
00003af4 <ParameterZuordnung>:
3af4: 1f 93 push r17
3af6: 80 91 df 04 lds r24, 0x04DF
3afa: 8b 3f cpi r24, 0xFB ; 251
3afc: 98 f0 brcs .+38 ; 0x3b24 <ParameterZuordnung+0x30>
3afe: 8b 3f cpi r24, 0xFB ; 251
3b00: 19 f4 brne .+6 ; 0x3b08 <ParameterZuordnung+0x14>
3b02: 80 91 10 02 lds r24, 0x0210
3b06: 0e c0 rjmp .+28 ; 0x3b24 <ParameterZuordnung+0x30>
3b08: 8c 3f cpi r24, 0xFC ; 252
3b0a: 19 f4 brne .+6 ; 0x3b12 <ParameterZuordnung+0x1e>
3b0c: 80 91 12 02 lds r24, 0x0212
3b10: 09 c0 rjmp .+18 ; 0x3b24 <ParameterZuordnung+0x30>
3b12: 8d 3f cpi r24, 0xFD ; 253
3b14: 19 f4 brne .+6 ; 0x3b1c <ParameterZuordnung+0x28>
3b16: 80 91 14 02 lds r24, 0x0214
3b1a: 04 c0 rjmp .+8 ; 0x3b24 <ParameterZuordnung+0x30>
3b1c: 8e 3f cpi r24, 0xFE ; 254
3b1e: 21 f4 brne .+8 ; 0x3b28 <ParameterZuordnung+0x34>
3b20: 80 91 16 02 lds r24, 0x0216
3b24: 80 93 81 01 sts 0x0181, r24
3b28: 80 91 81 01 lds r24, 0x0181
3b2c: 88 23 and r24, r24
3b2e: 19 f4 brne .+6 ; 0x3b36 <ParameterZuordnung+0x42>
3b30: 10 92 81 01 sts 0x0181, r1
3b34: 04 c0 rjmp .+8 ; 0x3b3e <ParameterZuordnung+0x4a>
3b36: 8f 3f cpi r24, 0xFF ; 255
3b38: 11 f4 brne .+4 ; 0x3b3e <ParameterZuordnung+0x4a>
3b3a: 80 93 81 01 sts 0x0181, r24
3b3e: 80 91 de 04 lds r24, 0x04DE
3b42: 8b 3f cpi r24, 0xFB ; 251
3b44: 98 f0 brcs .+38 ; 0x3b6c <ParameterZuordnung+0x78>
3b46: 8b 3f cpi r24, 0xFB ; 251
3b48: 19 f4 brne .+6 ; 0x3b50 <ParameterZuordnung+0x5c>
3b4a: 80 91 10 02 lds r24, 0x0210
3b4e: 0e c0 rjmp .+28 ; 0x3b6c <ParameterZuordnung+0x78>
3b50: 8c 3f cpi r24, 0xFC ; 252
3b52: 19 f4 brne .+6 ; 0x3b5a <ParameterZuordnung+0x66>
3b54: 80 91 12 02 lds r24, 0x0212
3b58: 09 c0 rjmp .+18 ; 0x3b6c <ParameterZuordnung+0x78>
3b5a: 8d 3f cpi r24, 0xFD ; 253
3b5c: 19 f4 brne .+6 ; 0x3b64 <ParameterZuordnung+0x70>
3b5e: 80 91 14 02 lds r24, 0x0214
3b62: 04 c0 rjmp .+8 ; 0x3b6c <ParameterZuordnung+0x78>
3b64: 8e 3f cpi r24, 0xFE ; 254
3b66: 21 f4 brne .+8 ; 0x3b70 <ParameterZuordnung+0x7c>
3b68: 80 91 16 02 lds r24, 0x0216
3b6c: 80 93 80 01 sts 0x0180, r24
3b70: 80 91 80 01 lds r24, 0x0180
3b74: 88 23 and r24, r24
3b76: 19 f4 brne .+6 ; 0x3b7e <ParameterZuordnung+0x8a>
3b78: 10 92 80 01 sts 0x0180, r1
3b7c: 05 c0 rjmp .+10 ; 0x3b88 <ParameterZuordnung+0x94>
3b7e: 84 36 cpi r24, 0x64 ; 100
3b80: 18 f0 brcs .+6 ; 0x3b88 <ParameterZuordnung+0x94>
3b82: 84 e6 ldi r24, 0x64 ; 100
3b84: 80 93 80 01 sts 0x0180, r24
3b88: 80 91 e0 04 lds r24, 0x04E0
3b8c: 8b 3f cpi r24, 0xFB ; 251
3b8e: 98 f0 brcs .+38 ; 0x3bb6 <ParameterZuordnung+0xc2>
3b90: 8b 3f cpi r24, 0xFB ; 251
3b92: 19 f4 brne .+6 ; 0x3b9a <ParameterZuordnung+0xa6>
3b94: 80 91 10 02 lds r24, 0x0210
3b98: 0e c0 rjmp .+28 ; 0x3bb6 <ParameterZuordnung+0xc2>
3b9a: 8c 3f cpi r24, 0xFC ; 252
3b9c: 19 f4 brne .+6 ; 0x3ba4 <ParameterZuordnung+0xb0>
3b9e: 80 91 12 02 lds r24, 0x0212
3ba2: 09 c0 rjmp .+18 ; 0x3bb6 <ParameterZuordnung+0xc2>
3ba4: 8d 3f cpi r24, 0xFD ; 253
3ba6: 19 f4 brne .+6 ; 0x3bae <ParameterZuordnung+0xba>
3ba8: 80 91 14 02 lds r24, 0x0214
3bac: 04 c0 rjmp .+8 ; 0x3bb6 <ParameterZuordnung+0xc2>
3bae: 8e 3f cpi r24, 0xFE ; 254
3bb0: 21 f4 brne .+8 ; 0x3bba <ParameterZuordnung+0xc6>
3bb2: 80 91 16 02 lds r24, 0x0216
3bb6: 80 93 82 01 sts 0x0182, r24
3bba: 80 91 82 01 lds r24, 0x0182
3bbe: 88 23 and r24, r24
3bc0: 19 f4 brne .+6 ; 0x3bc8 <ParameterZuordnung+0xd4>
3bc2: 10 92 82 01 sts 0x0182, r1
3bc6: 05 c0 rjmp .+10 ; 0x3bd2 <ParameterZuordnung+0xde>
3bc8: 84 36 cpi r24, 0x64 ; 100
3bca: 18 f0 brcs .+6 ; 0x3bd2 <ParameterZuordnung+0xde>
3bcc: 84 e6 ldi r24, 0x64 ; 100
3bce: 80 93 82 01 sts 0x0182, r24
3bd2: 80 91 e2 04 lds r24, 0x04E2
3bd6: 8b 3f cpi r24, 0xFB ; 251
3bd8: 98 f0 brcs .+38 ; 0x3c00 <ParameterZuordnung+0x10c>
3bda: 8b 3f cpi r24, 0xFB ; 251
3bdc: 19 f4 brne .+6 ; 0x3be4 <ParameterZuordnung+0xf0>
3bde: 80 91 10 02 lds r24, 0x0210
3be2: 0e c0 rjmp .+28 ; 0x3c00 <ParameterZuordnung+0x10c>
3be4: 8c 3f cpi r24, 0xFC ; 252
3be6: 19 f4 brne .+6 ; 0x3bee <ParameterZuordnung+0xfa>
3be8: 80 91 12 02 lds r24, 0x0212
3bec: 09 c0 rjmp .+18 ; 0x3c00 <ParameterZuordnung+0x10c>
3bee: 8d 3f cpi r24, 0xFD ; 253
3bf0: 19 f4 brne .+6 ; 0x3bf8 <ParameterZuordnung+0x104>
3bf2: 80 91 14 02 lds r24, 0x0214
3bf6: 04 c0 rjmp .+8 ; 0x3c00 <ParameterZuordnung+0x10c>
3bf8: 8e 3f cpi r24, 0xFE ; 254
3bfa: 21 f4 brne .+8 ; 0x3c04 <ParameterZuordnung+0x110>
3bfc: 80 91 16 02 lds r24, 0x0216
3c00: 80 93 83 01 sts 0x0183, r24
3c04: 80 91 83 01 lds r24, 0x0183
3c08: 88 23 and r24, r24
3c0a: 19 f4 brne .+6 ; 0x3c12 <ParameterZuordnung+0x11e>
3c0c: 10 92 83 01 sts 0x0183, r1
3c10: 04 c0 rjmp .+8 ; 0x3c1a <ParameterZuordnung+0x126>
3c12: 8f 3f cpi r24, 0xFF ; 255
3c14: 11 f4 brne .+4 ; 0x3c1a <ParameterZuordnung+0x126>
3c16: 80 93 83 01 sts 0x0183, r24
3c1a: 80 91 e9 04 lds r24, 0x04E9
3c1e: 8b 3f cpi r24, 0xFB ; 251
3c20: 98 f0 brcs .+38 ; 0x3c48 <ParameterZuordnung+0x154>
3c22: 8b 3f cpi r24, 0xFB ; 251
3c24: 19 f4 brne .+6 ; 0x3c2c <ParameterZuordnung+0x138>
3c26: 80 91 10 02 lds r24, 0x0210
3c2a: 0e c0 rjmp .+28 ; 0x3c48 <ParameterZuordnung+0x154>
3c2c: 8c 3f cpi r24, 0xFC ; 252
3c2e: 19 f4 brne .+6 ; 0x3c36 <ParameterZuordnung+0x142>
3c30: 80 91 12 02 lds r24, 0x0212
3c34: 09 c0 rjmp .+18 ; 0x3c48 <ParameterZuordnung+0x154>
3c36: 8d 3f cpi r24, 0xFD ; 253
3c38: 19 f4 brne .+6 ; 0x3c40 <ParameterZuordnung+0x14c>
3c3a: 80 91 14 02 lds r24, 0x0214
3c3e: 04 c0 rjmp .+8 ; 0x3c48 <ParameterZuordnung+0x154>
3c40: 8e 3f cpi r24, 0xFE ; 254
3c42: 21 f4 brne .+8 ; 0x3c4c <ParameterZuordnung+0x158>
3c44: 80 91 16 02 lds r24, 0x0216
3c48: 80 93 84 01 sts 0x0184, r24
3c4c: 80 91 84 01 lds r24, 0x0184
3c50: 88 23 and r24, r24
3c52: 19 f4 brne .+6 ; 0x3c5a <ParameterZuordnung+0x166>
3c54: 10 92 84 01 sts 0x0184, r1
3c58: 04 c0 rjmp .+8 ; 0x3c62 <ParameterZuordnung+0x16e>
3c5a: 8f 3f cpi r24, 0xFF ; 255
3c5c: 11 f4 brne .+4 ; 0x3c62 <ParameterZuordnung+0x16e>
3c5e: 80 93 84 01 sts 0x0184, r24
3c62: 80 91 ea 04 lds r24, 0x04EA
3c66: 8b 3f cpi r24, 0xFB ; 251
3c68: 98 f0 brcs .+38 ; 0x3c90 <ParameterZuordnung+0x19c>
3c6a: 8b 3f cpi r24, 0xFB ; 251
3c6c: 19 f4 brne .+6 ; 0x3c74 <ParameterZuordnung+0x180>
3c6e: 80 91 10 02 lds r24, 0x0210
3c72: 0e c0 rjmp .+28 ; 0x3c90 <ParameterZuordnung+0x19c>
3c74: 8c 3f cpi r24, 0xFC ; 252
3c76: 19 f4 brne .+6 ; 0x3c7e <ParameterZuordnung+0x18a>
3c78: 80 91 12 02 lds r24, 0x0212
3c7c: 09 c0 rjmp .+18 ; 0x3c90 <ParameterZuordnung+0x19c>
3c7e: 8d 3f cpi r24, 0xFD ; 253
3c80: 19 f4 brne .+6 ; 0x3c88 <ParameterZuordnung+0x194>
3c82: 80 91 14 02 lds r24, 0x0214
3c86: 04 c0 rjmp .+8 ; 0x3c90 <ParameterZuordnung+0x19c>
3c88: 8e 3f cpi r24, 0xFE ; 254
3c8a: 21 f4 brne .+8 ; 0x3c94 <ParameterZuordnung+0x1a0>
3c8c: 80 91 16 02 lds r24, 0x0216
3c90: 80 93 85 01 sts 0x0185, r24
3c94: 80 91 85 01 lds r24, 0x0185
3c98: 8b 30 cpi r24, 0x0B ; 11
3c9a: 10 f4 brcc .+4 ; 0x3ca0 <ParameterZuordnung+0x1ac>
3c9c: 8a e0 ldi r24, 0x0A ; 10
3c9e: 02 c0 rjmp .+4 ; 0x3ca4 <ParameterZuordnung+0x1b0>
3ca0: 8f 3f cpi r24, 0xFF ; 255
3ca2: 11 f4 brne .+4 ; 0x3ca8 <ParameterZuordnung+0x1b4>
3ca4: 80 93 85 01 sts 0x0185, r24
3ca8: 80 91 eb 04 lds r24, 0x04EB
3cac: 8b 3f cpi r24, 0xFB ; 251
3cae: 98 f0 brcs .+38 ; 0x3cd6 <ParameterZuordnung+0x1e2>
3cb0: 8b 3f cpi r24, 0xFB ; 251
3cb2: 19 f4 brne .+6 ; 0x3cba <ParameterZuordnung+0x1c6>
3cb4: 80 91 10 02 lds r24, 0x0210
3cb8: 0e c0 rjmp .+28 ; 0x3cd6 <ParameterZuordnung+0x1e2>
3cba: 8c 3f cpi r24, 0xFC ; 252
3cbc: 19 f4 brne .+6 ; 0x3cc4 <ParameterZuordnung+0x1d0>
3cbe: 80 91 12 02 lds r24, 0x0212
3cc2: 09 c0 rjmp .+18 ; 0x3cd6 <ParameterZuordnung+0x1e2>
3cc4: 8d 3f cpi r24, 0xFD ; 253
3cc6: 19 f4 brne .+6 ; 0x3cce <ParameterZuordnung+0x1da>
3cc8: 80 91 14 02 lds r24, 0x0214
3ccc: 04 c0 rjmp .+8 ; 0x3cd6 <ParameterZuordnung+0x1e2>
3cce: 8e 3f cpi r24, 0xFE ; 254
3cd0: 21 f4 brne .+8 ; 0x3cda <ParameterZuordnung+0x1e6>
3cd2: 80 91 16 02 lds r24, 0x0216
3cd6: 80 93 86 01 sts 0x0186, r24
3cda: 80 91 86 01 lds r24, 0x0186
3cde: 88 23 and r24, r24
3ce0: 19 f4 brne .+6 ; 0x3ce8 <ParameterZuordnung+0x1f4>
3ce2: 10 92 86 01 sts 0x0186, r1
3ce6: 04 c0 rjmp .+8 ; 0x3cf0 <ParameterZuordnung+0x1fc>
3ce8: 8f 3f cpi r24, 0xFF ; 255
3cea: 11 f4 brne .+4 ; 0x3cf0 <ParameterZuordnung+0x1fc>
3cec: 80 93 86 01 sts 0x0186, r24
3cf0: 80 91 f0 04 lds r24, 0x04F0
3cf4: 8b 3f cpi r24, 0xFB ; 251
3cf6: 98 f0 brcs .+38 ; 0x3d1e <ParameterZuordnung+0x22a>
3cf8: 8b 3f cpi r24, 0xFB ; 251
3cfa: 19 f4 brne .+6 ; 0x3d02 <ParameterZuordnung+0x20e>
3cfc: 80 91 10 02 lds r24, 0x0210
3d00: 0e c0 rjmp .+28 ; 0x3d1e <ParameterZuordnung+0x22a>
3d02: 8c 3f cpi r24, 0xFC ; 252
3d04: 19 f4 brne .+6 ; 0x3d0c <ParameterZuordnung+0x218>
3d06: 80 91 12 02 lds r24, 0x0212
3d0a: 09 c0 rjmp .+18 ; 0x3d1e <ParameterZuordnung+0x22a>
3d0c: 8d 3f cpi r24, 0xFD ; 253
3d0e: 19 f4 brne .+6 ; 0x3d16 <ParameterZuordnung+0x222>
3d10: 80 91 14 02 lds r24, 0x0214
3d14: 04 c0 rjmp .+8 ; 0x3d1e <ParameterZuordnung+0x22a>
3d16: 8e 3f cpi r24, 0xFE ; 254
3d18: 21 f4 brne .+8 ; 0x3d22 <ParameterZuordnung+0x22e>
3d1a: 80 91 16 02 lds r24, 0x0216
3d1e: 80 93 88 01 sts 0x0188, r24
3d22: 80 91 88 01 lds r24, 0x0188
3d26: 88 23 and r24, r24
3d28: 19 f4 brne .+6 ; 0x3d30 <ParameterZuordnung+0x23c>
3d2a: 10 92 88 01 sts 0x0188, r1
3d2e: 04 c0 rjmp .+8 ; 0x3d38 <ParameterZuordnung+0x244>
3d30: 8f 3f cpi r24, 0xFF ; 255
3d32: 11 f4 brne .+4 ; 0x3d38 <ParameterZuordnung+0x244>
3d34: 80 93 88 01 sts 0x0188, r24
3d38: 80 91 f1 04 lds r24, 0x04F1
3d3c: 8b 3f cpi r24, 0xFB ; 251
3d3e: 98 f0 brcs .+38 ; 0x3d66 <ParameterZuordnung+0x272>
3d40: 8b 3f cpi r24, 0xFB ; 251
3d42: 19 f4 brne .+6 ; 0x3d4a <ParameterZuordnung+0x256>
3d44: 80 91 10 02 lds r24, 0x0210
3d48: 0e c0 rjmp .+28 ; 0x3d66 <ParameterZuordnung+0x272>
3d4a: 8c 3f cpi r24, 0xFC ; 252
3d4c: 19 f4 brne .+6 ; 0x3d54 <ParameterZuordnung+0x260>
3d4e: 80 91 12 02 lds r24, 0x0212
3d52: 09 c0 rjmp .+18 ; 0x3d66 <ParameterZuordnung+0x272>
3d54: 8d 3f cpi r24, 0xFD ; 253
3d56: 19 f4 brne .+6 ; 0x3d5e <ParameterZuordnung+0x26a>
3d58: 80 91 14 02 lds r24, 0x0214
3d5c: 04 c0 rjmp .+8 ; 0x3d66 <ParameterZuordnung+0x272>
3d5e: 8e 3f cpi r24, 0xFE ; 254
3d60: 21 f4 brne .+8 ; 0x3d6a <ParameterZuordnung+0x276>
3d62: 80 91 16 02 lds r24, 0x0216
3d66: 80 93 24 02 sts 0x0224, r24
3d6a: 80 91 24 02 lds r24, 0x0224
3d6e: 88 23 and r24, r24
3d70: 19 f4 brne .+6 ; 0x3d78 <ParameterZuordnung+0x284>
3d72: 10 92 24 02 sts 0x0224, r1
3d76: 04 c0 rjmp .+8 ; 0x3d80 <ParameterZuordnung+0x28c>
3d78: 8f 3f cpi r24, 0xFF ; 255
3d7a: 11 f4 brne .+4 ; 0x3d80 <ParameterZuordnung+0x28c>
3d7c: 80 93 24 02 sts 0x0224, r24
3d80: 80 91 f2 04 lds r24, 0x04F2
3d84: 8b 3f cpi r24, 0xFB ; 251
3d86: 98 f0 brcs .+38 ; 0x3dae <ParameterZuordnung+0x2ba>
3d88: 8b 3f cpi r24, 0xFB ; 251
3d8a: 19 f4 brne .+6 ; 0x3d92 <ParameterZuordnung+0x29e>
3d8c: 80 91 10 02 lds r24, 0x0210
3d90: 0e c0 rjmp .+28 ; 0x3dae <ParameterZuordnung+0x2ba>
3d92: 8c 3f cpi r24, 0xFC ; 252
3d94: 19 f4 brne .+6 ; 0x3d9c <ParameterZuordnung+0x2a8>
3d96: 80 91 12 02 lds r24, 0x0212
3d9a: 09 c0 rjmp .+18 ; 0x3dae <ParameterZuordnung+0x2ba>
3d9c: 8d 3f cpi r24, 0xFD ; 253
3d9e: 19 f4 brne .+6 ; 0x3da6 <ParameterZuordnung+0x2b2>
3da0: 80 91 14 02 lds r24, 0x0214
3da4: 04 c0 rjmp .+8 ; 0x3dae <ParameterZuordnung+0x2ba>
3da6: 8e 3f cpi r24, 0xFE ; 254
3da8: 21 f4 brne .+8 ; 0x3db2 <ParameterZuordnung+0x2be>
3daa: 80 91 16 02 lds r24, 0x0216
3dae: 80 93 25 02 sts 0x0225, r24
3db2: 80 91 25 02 lds r24, 0x0225
3db6: 88 23 and r24, r24
3db8: 19 f4 brne .+6 ; 0x3dc0 <ParameterZuordnung+0x2cc>
3dba: 10 92 25 02 sts 0x0225, r1
3dbe: 04 c0 rjmp .+8 ; 0x3dc8 <ParameterZuordnung+0x2d4>
3dc0: 8f 3f cpi r24, 0xFF ; 255
3dc2: 11 f4 brne .+4 ; 0x3dc8 <ParameterZuordnung+0x2d4>
3dc4: 80 93 25 02 sts 0x0225, r24
3dc8: 80 91 f3 04 lds r24, 0x04F3
3dcc: 8b 3f cpi r24, 0xFB ; 251
3dce: 98 f0 brcs .+38 ; 0x3df6 <ParameterZuordnung+0x302>
3dd0: 8b 3f cpi r24, 0xFB ; 251
3dd2: 19 f4 brne .+6 ; 0x3dda <ParameterZuordnung+0x2e6>
3dd4: 80 91 10 02 lds r24, 0x0210
3dd8: 0e c0 rjmp .+28 ; 0x3df6 <ParameterZuordnung+0x302>
3dda: 8c 3f cpi r24, 0xFC ; 252
3ddc: 19 f4 brne .+6 ; 0x3de4 <ParameterZuordnung+0x2f0>
3dde: 80 91 12 02 lds r24, 0x0212
3de2: 09 c0 rjmp .+18 ; 0x3df6 <ParameterZuordnung+0x302>
3de4: 8d 3f cpi r24, 0xFD ; 253
3de6: 19 f4 brne .+6 ; 0x3dee <ParameterZuordnung+0x2fa>
3de8: 80 91 14 02 lds r24, 0x0214
3dec: 04 c0 rjmp .+8 ; 0x3df6 <ParameterZuordnung+0x302>
3dee: 8e 3f cpi r24, 0xFE ; 254
3df0: 21 f4 brne .+8 ; 0x3dfa <ParameterZuordnung+0x306>
3df2: 80 91 16 02 lds r24, 0x0216
3df6: 80 93 26 02 sts 0x0226, r24
3dfa: 80 91 26 02 lds r24, 0x0226
3dfe: 88 23 and r24, r24
3e00: 19 f4 brne .+6 ; 0x3e08 <ParameterZuordnung+0x314>
3e02: 10 92 26 02 sts 0x0226, r1
3e06: 04 c0 rjmp .+8 ; 0x3e10 <ParameterZuordnung+0x31c>
3e08: 8f 3f cpi r24, 0xFF ; 255
3e0a: 11 f4 brne .+4 ; 0x3e10 <ParameterZuordnung+0x31c>
3e0c: 80 93 26 02 sts 0x0226, r24
3e10: 80 91 f4 04 lds r24, 0x04F4
3e14: 8b 3f cpi r24, 0xFB ; 251
3e16: 98 f0 brcs .+38 ; 0x3e3e <ParameterZuordnung+0x34a>
3e18: 8b 3f cpi r24, 0xFB ; 251
3e1a: 19 f4 brne .+6 ; 0x3e22 <ParameterZuordnung+0x32e>
3e1c: 80 91 10 02 lds r24, 0x0210
3e20: 0e c0 rjmp .+28 ; 0x3e3e <ParameterZuordnung+0x34a>
3e22: 8c 3f cpi r24, 0xFC ; 252
3e24: 19 f4 brne .+6 ; 0x3e2c <ParameterZuordnung+0x338>
3e26: 80 91 12 02 lds r24, 0x0212
3e2a: 09 c0 rjmp .+18 ; 0x3e3e <ParameterZuordnung+0x34a>
3e2c: 8d 3f cpi r24, 0xFD ; 253
3e2e: 19 f4 brne .+6 ; 0x3e36 <ParameterZuordnung+0x342>
3e30: 80 91 14 02 lds r24, 0x0214
3e34: 04 c0 rjmp .+8 ; 0x3e3e <ParameterZuordnung+0x34a>
3e36: 8e 3f cpi r24, 0xFE ; 254
3e38: 21 f4 brne .+8 ; 0x3e42 <ParameterZuordnung+0x34e>
3e3a: 80 91 16 02 lds r24, 0x0216
3e3e: 80 93 27 02 sts 0x0227, r24
3e42: 80 91 27 02 lds r24, 0x0227
3e46: 88 23 and r24, r24
3e48: 19 f4 brne .+6 ; 0x3e50 <ParameterZuordnung+0x35c>
3e4a: 10 92 27 02 sts 0x0227, r1
3e4e: 04 c0 rjmp .+8 ; 0x3e58 <ParameterZuordnung+0x364>
3e50: 8f 3f cpi r24, 0xFF ; 255
3e52: 11 f4 brne .+4 ; 0x3e58 <ParameterZuordnung+0x364>
3e54: 80 93 27 02 sts 0x0227, r24
3e58: 90 91 f5 04 lds r25, 0x04F5
3e5c: 9b 3f cpi r25, 0xFB ; 251
3e5e: b0 f0 brcs .+44 ; 0x3e8c <ParameterZuordnung+0x398>
3e60: 9b 3f cpi r25, 0xFB ; 251
3e62: 19 f4 brne .+6 ; 0x3e6a <ParameterZuordnung+0x376>
3e64: 80 91 10 02 lds r24, 0x0210
3e68: 04 c0 rjmp .+8 ; 0x3e72 <ParameterZuordnung+0x37e>
3e6a: 9c 3f cpi r25, 0xFC ; 252
3e6c: 29 f4 brne .+10 ; 0x3e78 <ParameterZuordnung+0x384>
3e6e: 80 91 12 02 lds r24, 0x0212
3e72: 80 93 89 01 sts 0x0189, r24
3e76: 0c c0 rjmp .+24 ; 0x3e90 <ParameterZuordnung+0x39c>
3e78: 9d 3f cpi r25, 0xFD ; 253
3e7a: 19 f4 brne .+6 ; 0x3e82 <ParameterZuordnung+0x38e>
3e7c: 80 91 14 02 lds r24, 0x0214
3e80: f8 cf rjmp .-16 ; 0x3e72 <ParameterZuordnung+0x37e>
3e82: 9e 3f cpi r25, 0xFE ; 254
3e84: 29 f4 brne .+10 ; 0x3e90 <ParameterZuordnung+0x39c>
3e86: 80 91 16 02 lds r24, 0x0216
3e8a: f3 cf rjmp .-26 ; 0x3e72 <ParameterZuordnung+0x37e>
3e8c: 90 93 89 01 sts 0x0189, r25
3e90: 80 91 89 01 lds r24, 0x0189
3e94: 88 23 and r24, r24
3e96: 19 f4 brne .+6 ; 0x3e9e <ParameterZuordnung+0x3aa>
3e98: 10 92 89 01 sts 0x0189, r1
3e9c: 04 c0 rjmp .+8 ; 0x3ea6 <ParameterZuordnung+0x3b2>
3e9e: 8f 3f cpi r24, 0xFF ; 255
3ea0: 11 f4 brne .+4 ; 0x3ea6 <ParameterZuordnung+0x3b2>
3ea2: 80 93 89 01 sts 0x0189, r24
3ea6: 9b 3f cpi r25, 0xFB ; 251
3ea8: b0 f0 brcs .+44 ; 0x3ed6 <ParameterZuordnung+0x3e2>
3eaa: 9b 3f cpi r25, 0xFB ; 251
3eac: 19 f4 brne .+6 ; 0x3eb4 <ParameterZuordnung+0x3c0>
3eae: 80 91 10 02 lds r24, 0x0210
3eb2: 04 c0 rjmp .+8 ; 0x3ebc <ParameterZuordnung+0x3c8>
3eb4: 9c 3f cpi r25, 0xFC ; 252
3eb6: 29 f4 brne .+10 ; 0x3ec2 <ParameterZuordnung+0x3ce>
3eb8: 80 91 12 02 lds r24, 0x0212
3ebc: 80 93 89 01 sts 0x0189, r24
3ec0: 0c c0 rjmp .+24 ; 0x3eda <ParameterZuordnung+0x3e6>
3ec2: 9d 3f cpi r25, 0xFD ; 253
3ec4: 19 f4 brne .+6 ; 0x3ecc <ParameterZuordnung+0x3d8>
3ec6: 80 91 14 02 lds r24, 0x0214
3eca: f8 cf rjmp .-16 ; 0x3ebc <ParameterZuordnung+0x3c8>
3ecc: 9e 3f cpi r25, 0xFE ; 254
3ece: 29 f4 brne .+10 ; 0x3eda <ParameterZuordnung+0x3e6>
3ed0: 80 91 16 02 lds r24, 0x0216
3ed4: f3 cf rjmp .-26 ; 0x3ebc <ParameterZuordnung+0x3c8>
3ed6: 90 93 89 01 sts 0x0189, r25
3eda: 80 91 89 01 lds r24, 0x0189
3ede: 88 23 and r24, r24
3ee0: 19 f4 brne .+6 ; 0x3ee8 <ParameterZuordnung+0x3f4>
3ee2: 10 92 89 01 sts 0x0189, r1
3ee6: 04 c0 rjmp .+8 ; 0x3ef0 <ParameterZuordnung+0x3fc>
3ee8: 8f 3f cpi r24, 0xFF ; 255
3eea: 11 f4 brne .+4 ; 0x3ef0 <ParameterZuordnung+0x3fc>
3eec: 80 93 89 01 sts 0x0189, r24
3ef0: 9b 3f cpi r25, 0xFB ; 251
3ef2: b0 f0 brcs .+44 ; 0x3f20 <ParameterZuordnung+0x42c>
3ef4: 9b 3f cpi r25, 0xFB ; 251
3ef6: 19 f4 brne .+6 ; 0x3efe <ParameterZuordnung+0x40a>
3ef8: 80 91 10 02 lds r24, 0x0210
3efc: 04 c0 rjmp .+8 ; 0x3f06 <ParameterZuordnung+0x412>
3efe: 9c 3f cpi r25, 0xFC ; 252
3f00: 29 f4 brne .+10 ; 0x3f0c <ParameterZuordnung+0x418>
3f02: 80 91 12 02 lds r24, 0x0212
3f06: 80 93 89 01 sts 0x0189, r24
3f0a: 0c c0 rjmp .+24 ; 0x3f24 <ParameterZuordnung+0x430>
3f0c: 9d 3f cpi r25, 0xFD ; 253
3f0e: 19 f4 brne .+6 ; 0x3f16 <ParameterZuordnung+0x422>
3f10: 80 91 14 02 lds r24, 0x0214
3f14: f8 cf rjmp .-16 ; 0x3f06 <ParameterZuordnung+0x412>
3f16: 9e 3f cpi r25, 0xFE ; 254
3f18: 29 f4 brne .+10 ; 0x3f24 <ParameterZuordnung+0x430>
3f1a: 80 91 16 02 lds r24, 0x0216
3f1e: f3 cf rjmp .-26 ; 0x3f06 <ParameterZuordnung+0x412>
3f20: 90 93 89 01 sts 0x0189, r25
3f24: 80 91 89 01 lds r24, 0x0189
3f28: 88 23 and r24, r24
3f2a: 19 f4 brne .+6 ; 0x3f32 <ParameterZuordnung+0x43e>
3f2c: 10 92 89 01 sts 0x0189, r1
3f30: 04 c0 rjmp .+8 ; 0x3f3a <ParameterZuordnung+0x446>
3f32: 8f 3f cpi r24, 0xFF ; 255
3f34: 11 f4 brne .+4 ; 0x3f3a <ParameterZuordnung+0x446>
3f36: 80 93 89 01 sts 0x0189, r24
3f3a: 10 91 88 01 lds r17, 0x0188
3f3e: 61 2f mov r22, r17
3f40: 77 27 eor r23, r23
3f42: 67 fd sbrc r22, 7
3f44: 70 95 com r23
3f46: 87 2f mov r24, r23
3f48: 97 2f mov r25, r23
3f4a: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
3f4e: 17 ff sbrs r17, 7
3f50: 06 c0 rjmp .+12 ; 0x3f5e <ParameterZuordnung+0x46a>
3f52: 20 e0 ldi r18, 0x00 ; 0
3f54: 30 e0 ldi r19, 0x00 ; 0
3f56: 40 e8 ldi r20, 0x80 ; 128
3f58: 53 e4 ldi r21, 0x43 ; 67
3f5a: 0e 94 7c 2c call 0x58f8 ; 0x58f8 <__addsf3>
3f5e: 27 e1 ldi r18, 0x17 ; 23
3f60: 37 eb ldi r19, 0xB7 ; 183
3f62: 41 ed ldi r20, 0xD1 ; 209
3f64: 58 e3 ldi r21, 0x38 ; 56
3f66: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
3f6a: 60 93 7c 01 sts 0x017C, r22
3f6e: 70 93 7d 01 sts 0x017D, r23
3f72: 80 93 7e 01 sts 0x017E, r24
3f76: 90 93 7f 01 sts 0x017F, r25
3f7a: 80 91 e7 04 lds r24, 0x04E7
3f7e: 80 93 23 05 sts 0x0523, r24
3f82: 80 91 e6 04 lds r24, 0x04E6
3f86: 80 93 12 05 sts 0x0512, r24
3f8a: 1f 91 pop r17
3f8c: 08 95 ret
 
00003f8e <DefaultKonstanten2>:
3f8e: 81 e0 ldi r24, 0x01 ; 1
3f90: 80 93 d4 04 sts 0x04D4, r24
3f94: 42 e0 ldi r20, 0x02 ; 2
3f96: 40 93 d5 04 sts 0x04D5, r20
3f9a: 83 e0 ldi r24, 0x03 ; 3
3f9c: 80 93 d6 04 sts 0x04D6, r24
3fa0: 94 e0 ldi r25, 0x04 ; 4
3fa2: 90 93 d7 04 sts 0x04D7, r25
3fa6: 35 e0 ldi r19, 0x05 ; 5
3fa8: 30 93 d8 04 sts 0x04D8, r19
3fac: 86 e0 ldi r24, 0x06 ; 6
3fae: 80 93 d9 04 sts 0x04D9, r24
3fb2: 87 e0 ldi r24, 0x07 ; 7
3fb4: 80 93 da 04 sts 0x04DA, r24
3fb8: 10 92 dc 04 sts 0x04DC, r1
3fbc: 8e e1 ldi r24, 0x1E ; 30
3fbe: 80 93 dd 04 sts 0x04DD, r24
3fc2: 8b ef ldi r24, 0xFB ; 251
3fc4: 80 93 df 04 sts 0x04DF, r24
3fc8: 8a e0 ldi r24, 0x0A ; 10
3fca: 80 93 e0 04 sts 0x04E0, r24
3fce: 22 e3 ldi r18, 0x32 ; 50
3fd0: 20 93 de 04 sts 0x04DE, r18
3fd4: 20 93 e2 04 sts 0x04E2, r18
3fd8: 40 93 e1 04 sts 0x04E1, r20
3fdc: 90 93 e3 04 sts 0x04E3, r25
3fe0: 10 92 e4 04 sts 0x04E4, r1
3fe4: 90 e1 ldi r25, 0x10 ; 16
3fe6: 90 93 e5 04 sts 0x04E5, r25
3fea: 8f e0 ldi r24, 0x0F ; 15
3fec: 80 93 e6 04 sts 0x04E6, r24
3ff0: 8a ef ldi r24, 0xFA ; 250
3ff2: 80 93 e7 04 sts 0x04E7, r24
3ff6: 8a e1 ldi r24, 0x1A ; 26
3ff8: 80 93 e8 04 sts 0x04E8, r24
3ffc: 90 93 e9 04 sts 0x04E9, r25
4000: 8f ea ldi r24, 0xAF ; 175
4002: 80 93 ea 04 sts 0x04EA, r24
4006: 80 93 eb 04 sts 0x04EB, r24
400a: 8a e5 ldi r24, 0x5A ; 90
400c: 80 93 ec 04 sts 0x04EC, r24
4010: 83 e2 ldi r24, 0x23 ; 35
4012: 80 93 ed 04 sts 0x04ED, r24
4016: 84 e1 ldi r24, 0x14 ; 20
4018: 80 93 ee 04 sts 0x04EE, r24
401c: 10 92 ef 04 sts 0x04EF, r1
4020: 30 93 f0 04 sts 0x04F0, r19
4024: 82 eb ldi r24, 0xB2 ; 178
4026: 80 93 f1 04 sts 0x04F1, r24
402a: 10 92 f2 04 sts 0x04F2, r1
402e: 10 92 f3 04 sts 0x04F3, r1
4032: 10 92 f4 04 sts 0x04F4, r1
4036: 84 e6 ldi r24, 0x64 ; 100
4038: 80 93 f5 04 sts 0x04F5, r24
403c: 88 e2 ldi r24, 0x28 ; 40
403e: 80 93 f6 04 sts 0x04F6, r24
4042: 10 92 fa 04 sts 0x04FA, r1
4046: 20 93 f7 04 sts 0x04F7, r18
404a: 86 e9 ldi r24, 0x96 ; 150
404c: 80 93 f8 04 sts 0x04F8, r24
4050: 30 93 f9 04 sts 0x04F9, r19
4054: a2 e0 ldi r26, 0x02 ; 2
4056: b5 e0 ldi r27, 0x05 ; 5
4058: e8 e6 ldi r30, 0x68 ; 104
405a: f1 e0 ldi r31, 0x01 ; 1
405c: 8c e0 ldi r24, 0x0C ; 12
405e: 01 90 ld r0, Z+
4060: 0d 92 st X+, r0
4062: 81 50 subi r24, 0x01 ; 1
4064: e1 f7 brne .-8 ; 0x405e <DefaultKonstanten2+0xd0>
4066: 08 95 ret
 
00004068 <DefaultKonstanten1>:
4068: 81 e0 ldi r24, 0x01 ; 1
406a: 80 93 d4 04 sts 0x04D4, r24
406e: 52 e0 ldi r21, 0x02 ; 2
4070: 50 93 d5 04 sts 0x04D5, r21
4074: 83 e0 ldi r24, 0x03 ; 3
4076: 80 93 d6 04 sts 0x04D6, r24
407a: 44 e0 ldi r20, 0x04 ; 4
407c: 40 93 d7 04 sts 0x04D7, r20
4080: 35 e0 ldi r19, 0x05 ; 5
4082: 30 93 d8 04 sts 0x04D8, r19
4086: 86 e0 ldi r24, 0x06 ; 6
4088: 80 93 d9 04 sts 0x04D9, r24
408c: 87 e0 ldi r24, 0x07 ; 7
408e: 80 93 da 04 sts 0x04DA, r24
4092: 28 e0 ldi r18, 0x08 ; 8
4094: 20 93 db 04 sts 0x04DB, r18
4098: 10 92 dc 04 sts 0x04DC, r1
409c: 9e e1 ldi r25, 0x1E ; 30
409e: 90 93 dd 04 sts 0x04DD, r25
40a2: 8b ef ldi r24, 0xFB ; 251
40a4: 80 93 df 04 sts 0x04DF, r24
40a8: 8a e0 ldi r24, 0x0A ; 10
40aa: 80 93 e0 04 sts 0x04E0, r24
40ae: 86 e4 ldi r24, 0x46 ; 70
40b0: 80 93 de 04 sts 0x04DE, r24
40b4: 90 93 e2 04 sts 0x04E2, r25
40b8: 50 93 e1 04 sts 0x04E1, r21
40bc: 40 93 e3 04 sts 0x04E3, r20
40c0: 20 93 e4 04 sts 0x04E4, r18
40c4: 90 e1 ldi r25, 0x10 ; 16
40c6: 90 93 e5 04 sts 0x04E5, r25
40ca: 8f e0 ldi r24, 0x0F ; 15
40cc: 80 93 e6 04 sts 0x04E6, r24
40d0: 8a ef ldi r24, 0xFA ; 250
40d2: 80 93 e7 04 sts 0x04E7, r24
40d6: 8a e1 ldi r24, 0x1A ; 26
40d8: 80 93 e8 04 sts 0x04E8, r24
40dc: 90 93 e9 04 sts 0x04E9, r25
40e0: 88 e7 ldi r24, 0x78 ; 120
40e2: 80 93 ea 04 sts 0x04EA, r24
40e6: 96 e9 ldi r25, 0x96 ; 150
40e8: 90 93 eb 04 sts 0x04EB, r25
40ec: 8a e5 ldi r24, 0x5A ; 90
40ee: 80 93 ec 04 sts 0x04EC, r24
40f2: 83 e2 ldi r24, 0x23 ; 35
40f4: 80 93 ed 04 sts 0x04ED, r24
40f8: 84 e1 ldi r24, 0x14 ; 20
40fa: 80 93 ee 04 sts 0x04EE, r24
40fe: 10 92 ef 04 sts 0x04EF, r1
4102: 30 93 f0 04 sts 0x04F0, r19
4106: 82 eb ldi r24, 0xB2 ; 178
4108: 80 93 f1 04 sts 0x04F1, r24
410c: 10 92 f2 04 sts 0x04F2, r1
4110: 10 92 f3 04 sts 0x04F3, r1
4114: 10 92 f4 04 sts 0x04F4, r1
4118: 84 e6 ldi r24, 0x64 ; 100
411a: 80 93 f5 04 sts 0x04F5, r24
411e: 88 e2 ldi r24, 0x28 ; 40
4120: 80 93 f6 04 sts 0x04F6, r24
4124: 10 92 fa 04 sts 0x04FA, r1
4128: 82 e3 ldi r24, 0x32 ; 50
412a: 80 93 f7 04 sts 0x04F7, r24
412e: 90 93 f8 04 sts 0x04F8, r25
4132: 30 93 f9 04 sts 0x04F9, r19
4136: a2 e0 ldi r26, 0x02 ; 2
4138: b5 e0 ldi r27, 0x05 ; 5
413a: e0 e7 ldi r30, 0x70 ; 112
413c: f1 e0 ldi r31, 0x01 ; 1
413e: 8c e0 ldi r24, 0x0C ; 12
4140: 01 90 ld r0, Z+
4142: 0d 92 st X+, r0
4144: 81 50 subi r24, 0x01 ; 1
4146: e1 f7 brne .-8 ; 0x4140 <DefaultKonstanten1+0xd8>
4148: 08 95 ret
 
0000414a <SendMotorData>:
414a: 80 91 1f 02 lds r24, 0x021F
414e: 88 23 and r24, r24
4150: 01 f5 brne .+64 ; 0x4192 <SendMotorData+0x48>
4152: 10 92 61 02 sts 0x0261, r1
4156: 10 92 60 02 sts 0x0260, r1
415a: 10 92 64 02 sts 0x0264, r1
415e: 10 92 65 02 sts 0x0265, r1
4162: 80 91 96 01 lds r24, 0x0196
4166: 88 23 and r24, r24
4168: 11 f0 breq .+4 ; 0x416e <SendMotorData+0x24>
416a: 80 93 60 02 sts 0x0260, r24
416e: 80 91 97 01 lds r24, 0x0197
4172: 88 23 and r24, r24
4174: 11 f0 breq .+4 ; 0x417a <SendMotorData+0x30>
4176: 80 93 61 02 sts 0x0261, r24
417a: 80 91 98 01 lds r24, 0x0198
417e: 88 23 and r24, r24
4180: 11 f0 breq .+4 ; 0x4186 <SendMotorData+0x3c>
4182: 80 93 65 02 sts 0x0265, r24
4186: 80 91 99 01 lds r24, 0x0199
418a: 88 23 and r24, r24
418c: 11 f0 breq .+4 ; 0x4192 <SendMotorData+0x48>
418e: 80 93 64 02 sts 0x0264, r24
4192: 80 91 60 02 lds r24, 0x0260
4196: 99 27 eor r25, r25
4198: 90 93 73 04 sts 0x0473, r25
419c: 80 93 72 04 sts 0x0472, r24
41a0: 80 91 61 02 lds r24, 0x0261
41a4: 99 27 eor r25, r25
41a6: 90 93 75 04 sts 0x0475, r25
41aa: 80 93 74 04 sts 0x0474, r24
41ae: 80 91 65 02 lds r24, 0x0265
41b2: 99 27 eor r25, r25
41b4: 90 93 77 04 sts 0x0477, r25
41b8: 80 93 76 04 sts 0x0476, r24
41bc: 80 91 64 02 lds r24, 0x0264
41c0: 99 27 eor r25, r25
41c2: 90 93 79 04 sts 0x0479, r25
41c6: 80 93 78 04 sts 0x0478, r24
41ca: 10 92 c9 01 sts 0x01C9, r1
41ce: 10 92 ca 01 sts 0x01CA, r1
41d2: 0e 94 37 18 call 0x306e ; 0x306e <i2c_start>
41d6: 08 95 ret
 
000041d8 <SetNeutral>:
41d8: cf 93 push r28
41da: df 93 push r29
41dc: 10 92 1a 05 sts 0x051A, r1
41e0: 10 92 19 05 sts 0x0519, r1
41e4: 10 92 1c 05 sts 0x051C, r1
41e8: 10 92 1b 05 sts 0x051B, r1
41ec: 80 e0 ldi r24, 0x00 ; 0
41ee: 90 e0 ldi r25, 0x00 ; 0
41f0: a0 e0 ldi r26, 0x00 ; 0
41f2: b0 e0 ldi r27, 0x00 ; 0
41f4: 80 93 1d 05 sts 0x051D, r24
41f8: 90 93 1e 05 sts 0x051E, r25
41fc: a0 93 1f 05 sts 0x051F, r26
4200: b0 93 20 05 sts 0x0520, r27
4204: 10 92 d2 01 sts 0x01D2, r1
4208: 10 92 d1 01 sts 0x01D1, r1
420c: 10 92 d4 01 sts 0x01D4, r1
4210: 10 92 d3 01 sts 0x01D3, r1
4214: 10 92 d6 01 sts 0x01D6, r1
4218: 10 92 d5 01 sts 0x01D5, r1
421c: 0e 94 de 1b call 0x37bc ; 0x37bc <CalibrierMittelwert>
4220: 85 e0 ldi r24, 0x05 ; 5
4222: 90 e0 ldi r25, 0x00 ; 0
4224: 0e 94 b2 0b call 0x1764 ; 0x1764 <SetDelay>
4228: ec 01 movw r28, r24
422a: ce 01 movw r24, r28
422c: 0e 94 bb 0b call 0x1776 ; 0x1776 <CheckDelay>
4230: 88 23 and r24, r24
4232: d9 f3 breq .-10 ; 0x422a <SetNeutral+0x52>
4234: 0e 94 de 1b call 0x37bc ; 0x37bc <CalibrierMittelwert>
4238: 80 91 dc 04 lds r24, 0x04DC
423c: 80 ff sbrs r24, 0
423e: 10 c0 rjmp .+32 ; 0x4260 <SetNeutral+0x88>
4240: 80 91 0a 01 lds r24, 0x010A
4244: 90 91 0b 01 lds r25, 0x010B
4248: 87 5b subi r24, 0xB7 ; 183
424a: 93 40 sbci r25, 0x03 ; 3
424c: 38 f4 brcc .+14 ; 0x425c <SetNeutral+0x84>
424e: 80 91 0a 01 lds r24, 0x010A
4252: 90 91 0b 01 lds r25, 0x010B
4256: 8e 5e subi r24, 0xEE ; 238
4258: 92 40 sbci r25, 0x02 ; 2
425a: 10 f4 brcc .+4 ; 0x4260 <SetNeutral+0x88>
425c: 0e 94 f9 0f call 0x1ff2 ; 0x1ff2 <SucheLuftruckOffset>
4260: 80 91 10 05 lds r24, 0x0510
4264: 90 91 11 05 lds r25, 0x0511
4268: 97 ff sbrs r25, 7
426a: 03 c0 rjmp .+6 ; 0x4272 <SetNeutral+0x9a>
426c: 90 95 com r25
426e: 81 95 neg r24
4270: 9f 4f sbci r25, 0xFF ; 255
4272: 90 93 d2 01 sts 0x01D2, r25
4276: 80 93 d1 01 sts 0x01D1, r24
427a: 80 91 0e 05 lds r24, 0x050E
427e: 90 91 0f 05 lds r25, 0x050F
4282: 97 ff sbrs r25, 7
4284: 03 c0 rjmp .+6 ; 0x428c <SetNeutral+0xb4>
4286: 90 95 com r25
4288: 81 95 neg r24
428a: 9f 4f sbci r25, 0xFF ; 255
428c: 90 93 d4 01 sts 0x01D4, r25
4290: 80 93 d3 01 sts 0x01D3, r24
4294: 80 91 24 05 lds r24, 0x0524
4298: 90 91 25 05 lds r25, 0x0525
429c: 97 ff sbrs r25, 7
429e: 03 c0 rjmp .+6 ; 0x42a6 <SetNeutral+0xce>
42a0: 90 95 com r25
42a2: 81 95 neg r24
42a4: 9f 4f sbci r25, 0xFF ; 255
42a6: 90 93 d6 01 sts 0x01D6, r25
42aa: 80 93 d5 01 sts 0x01D5, r24
42ae: 88 e0 ldi r24, 0x08 ; 8
42b0: e9 e1 ldi r30, 0x19 ; 25
42b2: f5 e0 ldi r31, 0x05 ; 5
42b4: a5 e3 ldi r26, 0x35 ; 53
42b6: b1 e0 ldi r27, 0x01 ; 1
42b8: 18 2e mov r1, r24
42ba: 0e 94 ab 2e call 0x5d56 ; 0x5d56 <__eeprom_read_block_1F2021>
42be: 10 92 eb 01 sts 0x01EB, r1
42c2: 10 92 ec 01 sts 0x01EC, r1
42c6: 10 92 ed 01 sts 0x01ED, r1
42ca: 10 92 ee 01 sts 0x01EE, r1
42ce: 10 92 ef 01 sts 0x01EF, r1
42d2: 10 92 f0 01 sts 0x01F0, r1
42d6: 10 92 f1 01 sts 0x01F1, r1
42da: 10 92 f2 01 sts 0x01F2, r1
42de: 10 92 f3 01 sts 0x01F3, r1
42e2: 10 92 f4 01 sts 0x01F4, r1
42e6: 10 92 f5 01 sts 0x01F5, r1
42ea: 10 92 f6 01 sts 0x01F6, r1
42ee: 10 92 f7 01 sts 0x01F7, r1
42f2: 10 92 f8 01 sts 0x01F8, r1
42f6: 10 92 f9 01 sts 0x01F9, r1
42fa: 10 92 fa 01 sts 0x01FA, r1
42fe: 10 92 fb 01 sts 0x01FB, r1
4302: 10 92 fc 01 sts 0x01FC, r1
4306: 10 92 fd 01 sts 0x01FD, r1
430a: 10 92 fe 01 sts 0x01FE, r1
430e: 10 92 11 05 sts 0x0511, r1
4312: 10 92 10 05 sts 0x0510, r1
4316: 10 92 0f 05 sts 0x050F, r1
431a: 10 92 0e 05 sts 0x050E, r1
431e: 10 92 25 05 sts 0x0525, r1
4322: 10 92 24 05 sts 0x0524, r1
4326: 80 91 06 01 lds r24, 0x0106
432a: 90 91 07 01 lds r25, 0x0107
432e: a0 91 08 01 lds r26, 0x0108
4332: b0 91 09 01 lds r27, 0x0109
4336: 90 93 80 04 sts 0x0480, r25
433a: 80 93 7f 04 sts 0x047F, r24
433e: 10 92 be 01 sts 0x01BE, r1
4342: 10 92 bd 01 sts 0x01BD, r1
4346: 10 92 03 02 sts 0x0203, r1
434a: 10 92 04 02 sts 0x0204, r1
434e: 10 92 05 02 sts 0x0205, r1
4352: 10 92 06 02 sts 0x0206, r1
4356: 80 91 07 02 lds r24, 0x0207
435a: 90 91 08 02 lds r25, 0x0208
435e: 90 93 0a 02 sts 0x020A, r25
4362: 80 93 09 02 sts 0x0209, r24
4366: 0e 94 44 2c call 0x5888 ; 0x5888 <GPS_Neutral>
436a: 82 e3 ldi r24, 0x32 ; 50
436c: 90 e0 ldi r25, 0x00 ; 0
436e: 90 93 a7 01 sts 0x01A7, r25
4372: 80 93 a6 01 sts 0x01A6, r24
4376: df 91 pop r29
4378: cf 91 pop r28
437a: 08 95 ret
 
0000437c <calib_acc>:
437c: cf 93 push r28
437e: df 93 push r29
4380: 10 92 1a 05 sts 0x051A, r1
4384: 10 92 19 05 sts 0x0519, r1
4388: 10 92 1c 05 sts 0x051C, r1
438c: 10 92 1b 05 sts 0x051B, r1
4390: 80 e0 ldi r24, 0x00 ; 0
4392: 90 e0 ldi r25, 0x00 ; 0
4394: a0 e0 ldi r26, 0x00 ; 0
4396: b0 e0 ldi r27, 0x00 ; 0
4398: 80 93 1d 05 sts 0x051D, r24
439c: 90 93 1e 05 sts 0x051E, r25
43a0: a0 93 1f 05 sts 0x051F, r26
43a4: b0 93 20 05 sts 0x0520, r27
43a8: 0e 94 de 1b call 0x37bc ; 0x37bc <CalibrierMittelwert>
43ac: 85 e0 ldi r24, 0x05 ; 5
43ae: 90 e0 ldi r25, 0x00 ; 0
43b0: 0e 94 b2 0b call 0x1764 ; 0x1764 <SetDelay>
43b4: ec 01 movw r28, r24
43b6: ce 01 movw r24, r28
43b8: 0e 94 bb 0b call 0x1776 ; 0x1776 <CheckDelay>
43bc: 88 23 and r24, r24
43be: d9 f3 breq .-10 ; 0x43b6 <calib_acc+0x3a>
43c0: 0e 94 de 1b call 0x37bc ; 0x37bc <CalibrierMittelwert>
43c4: 80 91 21 05 lds r24, 0x0521
43c8: 90 91 22 05 lds r25, 0x0522
43cc: 97 ff sbrs r25, 7
43ce: 03 c0 rjmp .+6 ; 0x43d6 <calib_acc+0x5a>
43d0: 90 95 com r25
43d2: 81 95 neg r24
43d4: 9f 4f sbci r25, 0xFF ; 255
43d6: 60 e1 ldi r22, 0x10 ; 16
43d8: 70 e0 ldi r23, 0x00 ; 0
43da: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
43de: c9 e1 ldi r28, 0x19 ; 25
43e0: d5 e0 ldi r29, 0x05 ; 5
43e2: 70 93 1a 05 sts 0x051A, r23
43e6: 60 93 19 05 sts 0x0519, r22
43ea: 80 91 2a 05 lds r24, 0x052A
43ee: 90 91 2b 05 lds r25, 0x052B
43f2: 97 ff sbrs r25, 7
43f4: 03 c0 rjmp .+6 ; 0x43fc <calib_acc+0x80>
43f6: 90 95 com r25
43f8: 81 95 neg r24
43fa: 9f 4f sbci r25, 0xFF ; 255
43fc: 60 e1 ldi r22, 0x10 ; 16
43fe: 70 e0 ldi r23, 0x00 ; 0
4400: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
4404: 70 93 1c 05 sts 0x051C, r23
4408: 60 93 1b 05 sts 0x051B, r22
440c: 60 91 7d 04 lds r22, 0x047D
4410: 70 91 7e 04 lds r23, 0x047E
4414: 88 27 eor r24, r24
4416: 77 fd sbrc r23, 7
4418: 80 95 com r24
441a: 98 2f mov r25, r24
441c: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
4420: 60 93 1d 05 sts 0x051D, r22
4424: 70 93 1e 05 sts 0x051E, r23
4428: 80 93 1f 05 sts 0x051F, r24
442c: 90 93 20 05 sts 0x0520, r25
4430: 88 e0 ldi r24, 0x08 ; 8
4432: a5 e3 ldi r26, 0x35 ; 53
4434: b1 e0 ldi r27, 0x01 ; 1
4436: fe 01 movw r30, r28
4438: 18 2e mov r1, r24
443a: 0e 94 bc 2e call 0x5d78 ; 0x5d78 <__eeprom_write_block_1F2021>
443e: df 91 pop r29
4440: cf 91 pop r28
4442: 08 95 ret
 
00004444 <Piep>:
4444: 1f 93 push r17
4446: 18 2f mov r17, r24
4448: 0e c0 rjmp .+28 ; 0x4466 <Piep+0x22>
444a: 80 91 1f 02 lds r24, 0x021F
444e: 88 23 and r24, r24
4450: 61 f4 brne .+24 ; 0x446a <Piep+0x26>
4452: 84 e6 ldi r24, 0x64 ; 100
4454: 90 e0 ldi r25, 0x00 ; 0
4456: 90 93 a7 01 sts 0x01A7, r25
445a: 80 93 a6 01 sts 0x01A6, r24
445e: 8a ef ldi r24, 0xFA ; 250
4460: 90 e0 ldi r25, 0x00 ; 0
4462: 0e 94 cb 0c call 0x1996 ; 0x1996 <Delay_ms>
4466: 11 50 subi r17, 0x01 ; 1
4468: 80 f7 brcc .-32 ; 0x444a <Piep+0x6>
446a: 1f 91 pop r17
446c: 08 95 ret
 
0000446e <MotorRegler>:
446e: a6 e0 ldi r26, 0x06 ; 6
4470: b0 e0 ldi r27, 0x00 ; 0
4472: ed e3 ldi r30, 0x3D ; 61
4474: f2 e2 ldi r31, 0x22 ; 34
4476: 0c 94 66 2e jmp 0x5ccc ; 0x5ccc <__prologue_saves__>
447a: 0e 94 7f 19 call 0x32fe ; 0x32fe <Mittelwert>
447e: 29 9a sbi 0x05, 1 ; 5
4480: e0 91 d6 04 lds r30, 0x04D6
4484: ff 27 eor r31, r31
4486: ee 0f add r30, r30
4488: ff 1f adc r31, r31
448a: e8 55 subi r30, 0x58 ; 88
448c: fb 4f sbci r31, 0xFB ; 251
448e: 40 80 ld r4, Z
4490: 51 80 ldd r5, Z+1 ; 0x01
4492: 48 e7 ldi r20, 0x78 ; 120
4494: 50 e0 ldi r21, 0x00 ; 0
4496: 44 0e add r4, r20
4498: 55 1e adc r5, r21
449a: 57 fe sbrs r5, 7
449c: 02 c0 rjmp .+4 ; 0x44a2 <MotorRegler+0x34>
449e: 44 24 eor r4, r4
44a0: 55 24 eor r5, r5
44a2: 80 91 18 02 lds r24, 0x0218
44a6: 84 36 cpi r24, 0x64 ; 100
44a8: 08 f0 brcs .+2 ; 0x44ac <MotorRegler+0x3e>
44aa: 48 c0 rjmp .+144 ; 0x453c <MotorRegler+0xce>
44ac: 80 91 01 01 lds r24, 0x0101
44b0: 88 23 and r24, r24
44b2: 31 f4 brne .+12 ; 0x44c0 <MotorRegler+0x52>
44b4: 84 ef ldi r24, 0xF4 ; 244
44b6: 91 e0 ldi r25, 0x01 ; 1
44b8: 90 93 a7 01 sts 0x01A7, r25
44bc: 80 93 a6 01 sts 0x01A6, r24
44c0: 80 91 30 02 lds r24, 0x0230
44c4: 90 91 31 02 lds r25, 0x0231
44c8: 00 97 sbiw r24, 0x00 ; 0
44ca: 31 f0 breq .+12 ; 0x44d8 <MotorRegler+0x6a>
44cc: 01 97 sbiw r24, 0x01 ; 1
44ce: 90 93 31 02 sts 0x0231, r25
44d2: 80 93 30 02 sts 0x0230, r24
44d6: 04 c0 rjmp .+8 ; 0x44e0 <MotorRegler+0x72>
44d8: 10 92 1f 02 sts 0x021F, r1
44dc: 10 92 0e 02 sts 0x020E, r1
44e0: 28 9a sbi 0x05, 0 ; 5
44e2: 80 91 2b 02 lds r24, 0x022B
44e6: 90 91 2c 02 lds r25, 0x022C
44ea: 81 5d subi r24, 0xD1 ; 209
44ec: 97 40 sbci r25, 0x07 ; 7
44ee: 18 f1 brcs .+70 ; 0x4536 <MotorRegler+0xc8>
44f0: 80 91 ed 04 lds r24, 0x04ED
44f4: 48 2e mov r4, r24
44f6: 55 24 eor r5, r5
44f8: 81 e0 ldi r24, 0x01 ; 1
44fa: 80 93 0e 02 sts 0x020E, r24
44fe: e0 91 d4 04 lds r30, 0x04D4
4502: ff 27 eor r31, r31
4504: ee 0f add r30, r30
4506: ff 1f adc r31, r31
4508: e8 55 subi r30, 0x58 ; 88
450a: fb 4f sbci r31, 0xFB ; 251
450c: 11 82 std Z+1, r1 ; 0x01
450e: 10 82 st Z, r1
4510: e0 91 d5 04 lds r30, 0x04D5
4514: ff 27 eor r31, r31
4516: ee 0f add r30, r30
4518: ff 1f adc r31, r31
451a: e8 55 subi r30, 0x58 ; 88
451c: fb 4f sbci r31, 0xFB ; 251
451e: 11 82 std Z+1, r1 ; 0x01
4520: 10 82 st Z, r1
4522: e0 91 d7 04 lds r30, 0x04D7
4526: ff 27 eor r31, r31
4528: ee 0f add r30, r30
452a: ff 1f adc r31, r31
452c: e8 55 subi r30, 0x58 ; 88
452e: fb 4f sbci r31, 0xFB ; 251
4530: 11 82 std Z+1, r1 ; 0x01
4532: 10 82 st Z, r1
4534: cb c1 rjmp .+918 ; 0x48cc <MotorRegler+0x45e>
4536: 10 92 1f 02 sts 0x021F, r1
453a: c8 c1 rjmp .+912 ; 0x48cc <MotorRegler+0x45e>
453c: 80 91 18 02 lds r24, 0x0218
4540: 8d 38 cpi r24, 0x8D ; 141
4542: 08 f4 brcc .+2 ; 0x4546 <MotorRegler+0xd8>
4544: c3 c1 rjmp .+902 ; 0x48cc <MotorRegler+0x45e>
4546: 10 92 0e 02 sts 0x020E, r1
454a: 80 91 ee 04 lds r24, 0x04EE
454e: 22 e3 ldi r18, 0x32 ; 50
4550: 82 9f mul r24, r18
4552: c0 01 movw r24, r0
4554: 11 24 eor r1, r1
4556: 90 93 31 02 sts 0x0231, r25
455a: 80 93 30 02 sts 0x0230, r24
455e: 69 e2 ldi r22, 0x29 ; 41
4560: 46 16 cp r4, r22
4562: 51 04 cpc r5, r1
4564: 6c f0 brlt .+26 ; 0x4580 <MotorRegler+0x112>
4566: 80 91 2b 02 lds r24, 0x022B
456a: 90 91 2c 02 lds r25, 0x022C
456e: 7f ef ldi r23, 0xFF ; 255
4570: 8f 3f cpi r24, 0xFF ; 255
4572: 97 07 cpc r25, r23
4574: 81 f1 breq .+96 ; 0x45d6 <MotorRegler+0x168>
4576: 01 96 adiw r24, 0x01 ; 1
4578: 90 93 2c 02 sts 0x022C, r25
457c: 80 93 2b 02 sts 0x022B, r24
4580: 80 91 2b 02 lds r24, 0x022B
4584: 90 91 2c 02 lds r25, 0x022C
4588: 88 3c cpi r24, 0xC8 ; 200
458a: 91 05 cpc r25, r1
458c: 20 f0 brcs .+8 ; 0x4596 <MotorRegler+0x128>
458e: 88 e2 ldi r24, 0x28 ; 40
4590: 48 16 cp r4, r24
4592: 51 04 cpc r5, r1
4594: 04 f5 brge .+64 ; 0x45d6 <MotorRegler+0x168>
4596: 10 92 46 02 sts 0x0246, r1
459a: 10 92 47 02 sts 0x0247, r1
459e: 10 92 48 02 sts 0x0248, r1
45a2: 10 92 49 02 sts 0x0249, r1
45a6: 10 92 42 02 sts 0x0242, r1
45aa: 10 92 43 02 sts 0x0243, r1
45ae: 10 92 44 02 sts 0x0244, r1
45b2: 10 92 45 02 sts 0x0245, r1
45b6: 10 92 fb 01 sts 0x01FB, r1
45ba: 10 92 fc 01 sts 0x01FC, r1
45be: 10 92 fd 01 sts 0x01FD, r1
45c2: 10 92 fe 01 sts 0x01FE, r1
45c6: 10 92 ff 01 sts 0x01FF, r1
45ca: 10 92 00 02 sts 0x0200, r1
45ce: 10 92 01 02 sts 0x0201, r1
45d2: 10 92 02 02 sts 0x0202, r1
45d6: 99 ec ldi r25, 0xC9 ; 201
45d8: 49 16 cp r4, r25
45da: 51 04 cpc r5, r1
45dc: 0c f4 brge .+2 ; 0x45e0 <MotorRegler+0x172>
45de: d6 c0 rjmp .+428 ; 0x478c <MotorRegler+0x31e>
45e0: 80 91 1f 02 lds r24, 0x021F
45e4: 88 23 and r24, r24
45e6: 09 f0 breq .+2 ; 0x45ea <MotorRegler+0x17c>
45e8: 71 c1 rjmp .+738 ; 0x48cc <MotorRegler+0x45e>
45ea: e0 91 d7 04 lds r30, 0x04D7
45ee: ff 27 eor r31, r31
45f0: ee 0f add r30, r30
45f2: ff 1f adc r31, r31
45f4: e8 55 subi r30, 0x58 ; 88
45f6: fb 4f sbci r31, 0xFB ; 251
45f8: 80 81 ld r24, Z
45fa: 91 81 ldd r25, Z+1 ; 0x01
45fc: 8c 34 cpi r24, 0x4C ; 76
45fe: 91 05 cpc r25, r1
4600: 0c f4 brge .+2 ; 0x4604 <MotorRegler+0x196>
4602: c1 c0 rjmp .+386 ; 0x4786 <MotorRegler+0x318>
4604: 80 91 2f 02 lds r24, 0x022F
4608: 8f 5f subi r24, 0xFF ; 255
460a: 80 93 2f 02 sts 0x022F, r24
460e: 89 3c cpi r24, 0xC9 ; 201
4610: 08 f4 brcc .+2 ; 0x4614 <MotorRegler+0x1a6>
4612: 5c c1 rjmp .+696 ; 0x48cc <MotorRegler+0x45e>
4614: 29 98 cbi 0x05, 1 ; 5
4616: 0e 94 ec 20 call 0x41d8 ; 0x41d8 <SetNeutral>
461a: 10 92 1f 02 sts 0x021F, r1
461e: 10 92 2f 02 sts 0x022F, r1
4622: 10 92 2c 02 sts 0x022C, r1
4626: 10 92 2b 02 sts 0x022B, r1
462a: 80 91 d4 04 lds r24, 0x04D4
462e: 28 2f mov r18, r24
4630: 33 27 eor r19, r19
4632: f9 01 movw r30, r18
4634: ee 0f add r30, r30
4636: ff 1f adc r31, r31
4638: e8 55 subi r30, 0x58 ; 88
463a: fb 4f sbci r31, 0xFB ; 251
463c: 80 81 ld r24, Z
463e: 91 81 ldd r25, Z+1 ; 0x01
4640: 87 34 cpi r24, 0x47 ; 71
4642: 91 05 cpc r25, r1
4644: 9c f4 brge .+38 ; 0x466c <MotorRegler+0x1fe>
4646: e0 91 d5 04 lds r30, 0x04D5
464a: ff 27 eor r31, r31
464c: ee 0f add r30, r30
464e: ff 1f adc r31, r31
4650: e8 55 subi r30, 0x58 ; 88
4652: fb 4f sbci r31, 0xFB ; 251
4654: 01 90 ld r0, Z+
4656: f0 81 ld r31, Z
4658: e0 2d mov r30, r0
465a: f7 ff sbrs r31, 7
465c: 03 c0 rjmp .+6 ; 0x4664 <MotorRegler+0x1f6>
465e: f0 95 com r31
4660: e1 95 neg r30
4662: ff 4f sbci r31, 0xFF ; 255
4664: e7 34 cpi r30, 0x47 ; 71
4666: f1 05 cpc r31, r1
4668: 0c f4 brge .+2 ; 0x466c <MotorRegler+0x1fe>
466a: 6c c0 rjmp .+216 ; 0x4744 <MotorRegler+0x2d6>
466c: 80 91 d5 04 lds r24, 0x04D5
4670: 68 2f mov r22, r24
4672: 77 27 eor r23, r23
4674: db 01 movw r26, r22
4676: aa 0f add r26, r26
4678: bb 1f adc r27, r27
467a: a8 55 subi r26, 0x58 ; 88
467c: bb 4f sbci r27, 0xFB ; 251
467e: 8d 91 ld r24, X+
4680: 9c 91 ld r25, X
4682: 11 97 sbiw r26, 0x01 ; 1
4684: 87 34 cpi r24, 0x47 ; 71
4686: 91 05 cpc r25, r1
4688: 3c f0 brlt .+14 ; 0x4698 <MotorRegler+0x22a>
468a: f9 01 movw r30, r18
468c: ee 0f add r30, r30
468e: ff 1f adc r31, r31
4690: e8 55 subi r30, 0x58 ; 88
4692: fb 4f sbci r31, 0xFB ; 251
4694: 80 81 ld r24, Z
4696: 91 81 ldd r25, Z+1 ; 0x01
4698: 8d 91 ld r24, X+
469a: 9c 91 ld r25, X
469c: 87 34 cpi r24, 0x47 ; 71
469e: 91 05 cpc r25, r1
46a0: 64 f0 brlt .+24 ; 0x46ba <MotorRegler+0x24c>
46a2: f9 01 movw r30, r18
46a4: ee 0f add r30, r30
46a6: ff 1f adc r31, r31
46a8: e8 55 subi r30, 0x58 ; 88
46aa: fb 4f sbci r31, 0xFB ; 251
46ac: 80 81 ld r24, Z
46ae: 91 81 ldd r25, Z+1 ; 0x01
46b0: 87 34 cpi r24, 0x47 ; 71
46b2: 91 05 cpc r25, r1
46b4: 14 f0 brlt .+4 ; 0x46ba <MotorRegler+0x24c>
46b6: 42 e0 ldi r20, 0x02 ; 2
46b8: 01 c0 rjmp .+2 ; 0x46bc <MotorRegler+0x24e>
46ba: 41 e0 ldi r20, 0x01 ; 1
46bc: fb 01 movw r30, r22
46be: ee 0f add r30, r30
46c0: ff 1f adc r31, r31
46c2: e8 55 subi r30, 0x58 ; 88
46c4: fb 4f sbci r31, 0xFB ; 251
46c6: 80 81 ld r24, Z
46c8: 91 81 ldd r25, Z+1 ; 0x01
46ca: 86 34 cpi r24, 0x46 ; 70
46cc: 91 05 cpc r25, r1
46ce: 5c f4 brge .+22 ; 0x46e6 <MotorRegler+0x278>
46d0: f9 01 movw r30, r18
46d2: ee 0f add r30, r30
46d4: ff 1f adc r31, r31
46d6: e8 55 subi r30, 0x58 ; 88
46d8: fb 4f sbci r31, 0xFB ; 251
46da: 80 81 ld r24, Z
46dc: 91 81 ldd r25, Z+1 ; 0x01
46de: 87 34 cpi r24, 0x47 ; 71
46e0: 91 05 cpc r25, r1
46e2: 0c f0 brlt .+2 ; 0x46e6 <MotorRegler+0x278>
46e4: 43 e0 ldi r20, 0x03 ; 3
46e6: fb 01 movw r30, r22
46e8: ee 0f add r30, r30
46ea: ff 1f adc r31, r31
46ec: e8 55 subi r30, 0x58 ; 88
46ee: fb 4f sbci r31, 0xFB ; 251
46f0: 80 81 ld r24, Z
46f2: 91 81 ldd r25, Z+1 ; 0x01
46f4: 8a 5b subi r24, 0xBA ; 186
46f6: 9f 4f sbci r25, 0xFF ; 255
46f8: 5c f4 brge .+22 ; 0x4710 <MotorRegler+0x2a2>
46fa: f9 01 movw r30, r18
46fc: ee 0f add r30, r30
46fe: ff 1f adc r31, r31
4700: e8 55 subi r30, 0x58 ; 88
4702: fb 4f sbci r31, 0xFB ; 251
4704: 80 81 ld r24, Z
4706: 91 81 ldd r25, Z+1 ; 0x01
4708: 87 34 cpi r24, 0x47 ; 71
470a: 91 05 cpc r25, r1
470c: 0c f0 brlt .+2 ; 0x4710 <MotorRegler+0x2a2>
470e: 44 e0 ldi r20, 0x04 ; 4
4710: 66 0f add r22, r22
4712: 77 1f adc r23, r23
4714: 68 55 subi r22, 0x58 ; 88
4716: 7b 4f sbci r23, 0xFB ; 251
4718: fb 01 movw r30, r22
471a: 80 81 ld r24, Z
471c: 91 81 ldd r25, Z+1 ; 0x01
471e: 8a 5b subi r24, 0xBA ; 186
4720: 9f 4f sbci r25, 0xFF ; 255
4722: 5c f4 brge .+22 ; 0x473a <MotorRegler+0x2cc>
4724: 22 0f add r18, r18
4726: 33 1f adc r19, r19
4728: 28 55 subi r18, 0x58 ; 88
472a: 3b 4f sbci r19, 0xFB ; 251
472c: d9 01 movw r26, r18
472e: 8d 91 ld r24, X+
4730: 9c 91 ld r25, X
4732: 86 34 cpi r24, 0x46 ; 70
4734: 91 05 cpc r25, r1
4736: 0c f4 brge .+2 ; 0x473a <MotorRegler+0x2cc>
4738: 45 e0 ldi r20, 0x05 ; 5
473a: a2 e0 ldi r26, 0x02 ; 2
473c: b0 e0 ldi r27, 0x00 ; 0
473e: 04 2e mov r0, r20
4740: 0e 94 b0 2e call 0x5d60 ; 0x5d60 <__eeprom_write_byte_1F2021>
4744: 0e 94 a9 03 call 0x752 ; 0x752 <GetActiveParamSetNumber>
4748: 4a e3 ldi r20, 0x3A ; 58
474a: 64 ed ldi r22, 0xD4 ; 212
474c: 74 e0 ldi r23, 0x04 ; 4
474e: 0e 94 ca 03 call 0x794 ; 0x794 <ReadParameterSet>
4752: 0e 94 a9 03 call 0x752 ; 0x752 <GetActiveParamSetNumber>
4756: 0e 94 22 22 call 0x4444 ; 0x4444 <Piep>
475a: 80 91 dc 04 lds r24, 0x04DC
475e: 80 ff sbrs r24, 0
4760: b5 c0 rjmp .+362 ; 0x48cc <MotorRegler+0x45e>
4762: 80 91 0a 01 lds r24, 0x010A
4766: 90 91 0b 01 lds r25, 0x010B
476a: 87 5b subi r24, 0xB7 ; 183
476c: 93 40 sbci r25, 0x03 ; 3
476e: 40 f4 brcc .+16 ; 0x4780 <MotorRegler+0x312>
4770: 80 91 0a 01 lds r24, 0x010A
4774: 90 91 0b 01 lds r25, 0x010B
4778: 8e 5e subi r24, 0xEE ; 238
477a: 92 40 sbci r25, 0x02 ; 2
477c: 08 f0 brcs .+2 ; 0x4780 <MotorRegler+0x312>
477e: a6 c0 rjmp .+332 ; 0x48cc <MotorRegler+0x45e>
4780: 0e 94 f9 0f call 0x1ff2 ; 0x1ff2 <SucheLuftruckOffset>
4784: a3 c0 rjmp .+326 ; 0x48cc <MotorRegler+0x45e>
4786: 10 92 2f 02 sts 0x022F, r1
478a: a0 c0 rjmp .+320 ; 0x48cc <MotorRegler+0x45e>
478c: f3 e2 ldi r31, 0x23 ; 35
478e: 4f 16 cp r4, r31
4790: 51 04 cpc r5, r1
4792: 0c f0 brlt .+2 ; 0x4796 <MotorRegler+0x328>
4794: 9b c0 rjmp .+310 ; 0x48cc <MotorRegler+0x45e>
4796: 80 91 d7 04 lds r24, 0x04D7
479a: 48 2f mov r20, r24
479c: 55 27 eor r21, r21
479e: fa 01 movw r30, r20
47a0: ee 0f add r30, r30
47a2: ff 1f adc r31, r31
47a4: e8 55 subi r30, 0x58 ; 88
47a6: fb 4f sbci r31, 0xFB ; 251
47a8: 80 81 ld r24, Z
47aa: 91 81 ldd r25, Z+1 ; 0x01
47ac: 85 5b subi r24, 0xB5 ; 181
47ae: 9f 4f sbci r25, 0xFF ; 255
47b0: 0c f0 brlt .+2 ; 0x47b4 <MotorRegler+0x346>
47b2: 6d c0 rjmp .+218 ; 0x488e <MotorRegler+0x420>
47b4: 80 91 2e 02 lds r24, 0x022E
47b8: 8f 5f subi r24, 0xFF ; 255
47ba: 80 93 2e 02 sts 0x022E, r24
47be: 89 3c cpi r24, 0xC9 ; 201
47c0: 08 f4 brcc .+2 ; 0x47c4 <MotorRegler+0x356>
47c2: 67 c0 rjmp .+206 ; 0x4892 <MotorRegler+0x424>
47c4: 88 ec ldi r24, 0xC8 ; 200
47c6: 80 93 2e 02 sts 0x022E, r24
47ca: 81 e0 ldi r24, 0x01 ; 1
47cc: 90 e0 ldi r25, 0x00 ; 0
47ce: 90 93 2c 02 sts 0x022C, r25
47d2: 80 93 2b 02 sts 0x022B, r24
47d6: 81 e0 ldi r24, 0x01 ; 1
47d8: 80 93 1f 02 sts 0x021F, r24
47dc: 10 92 3e 02 sts 0x023E, r1
47e0: 10 92 3f 02 sts 0x023F, r1
47e4: 10 92 40 02 sts 0x0240, r1
47e8: 10 92 41 02 sts 0x0241, r1
47ec: 10 92 fb 01 sts 0x01FB, r1
47f0: 10 92 fc 01 sts 0x01FC, r1
47f4: 10 92 fd 01 sts 0x01FD, r1
47f8: 10 92 fe 01 sts 0x01FE, r1
47fc: 10 92 ff 01 sts 0x01FF, r1
4800: 10 92 00 02 sts 0x0200, r1
4804: 10 92 01 02 sts 0x0201, r1
4808: 10 92 02 02 sts 0x0202, r1
480c: 10 92 eb 01 sts 0x01EB, r1
4810: 10 92 ec 01 sts 0x01EC, r1
4814: 10 92 ed 01 sts 0x01ED, r1
4818: 10 92 ee 01 sts 0x01EE, r1
481c: 10 92 f3 01 sts 0x01F3, r1
4820: 10 92 f4 01 sts 0x01F4, r1
4824: 10 92 f5 01 sts 0x01F5, r1
4828: 10 92 f6 01 sts 0x01F6, r1
482c: 80 91 d7 01 lds r24, 0x01D7
4830: 90 91 d8 01 lds r25, 0x01D8
4834: a0 91 d9 01 lds r26, 0x01D9
4838: b0 91 da 01 lds r27, 0x01DA
483c: 80 93 ef 01 sts 0x01EF, r24
4840: 90 93 f0 01 sts 0x01F0, r25
4844: a0 93 f1 01 sts 0x01F1, r26
4848: b0 93 f2 01 sts 0x01F2, r27
484c: 80 91 df 01 lds r24, 0x01DF
4850: 90 91 e0 01 lds r25, 0x01E0
4854: a0 91 e1 01 lds r26, 0x01E1
4858: b0 91 e2 01 lds r27, 0x01E2
485c: 80 93 f7 01 sts 0x01F7, r24
4860: 90 93 f8 01 sts 0x01F8, r25
4864: a0 93 f9 01 sts 0x01F9, r26
4868: b0 93 fa 01 sts 0x01FA, r27
486c: 10 92 46 02 sts 0x0246, r1
4870: 10 92 47 02 sts 0x0247, r1
4874: 10 92 48 02 sts 0x0248, r1
4878: 10 92 49 02 sts 0x0249, r1
487c: 10 92 42 02 sts 0x0242, r1
4880: 10 92 43 02 sts 0x0243, r1
4884: 10 92 44 02 sts 0x0244, r1
4888: 10 92 45 02 sts 0x0245, r1
488c: 02 c0 rjmp .+4 ; 0x4892 <MotorRegler+0x424>
488e: 10 92 2e 02 sts 0x022E, r1
4892: 44 0f add r20, r20
4894: 55 1f adc r21, r21
4896: 48 55 subi r20, 0x58 ; 88
4898: 5b 4f sbci r21, 0xFB ; 251
489a: da 01 movw r26, r20
489c: 8d 91 ld r24, X+
489e: 9c 91 ld r25, X
48a0: 8c 34 cpi r24, 0x4C ; 76
48a2: 91 05 cpc r25, r1
48a4: 8c f0 brlt .+34 ; 0x48c8 <MotorRegler+0x45a>
48a6: 80 91 2d 02 lds r24, 0x022D
48aa: 8f 5f subi r24, 0xFF ; 255
48ac: 80 93 2d 02 sts 0x022D, r24
48b0: 89 3c cpi r24, 0xC9 ; 201
48b2: 60 f0 brcs .+24 ; 0x48cc <MotorRegler+0x45e>
48b4: 10 92 1f 02 sts 0x021F, r1
48b8: 88 ec ldi r24, 0xC8 ; 200
48ba: 80 93 2d 02 sts 0x022D, r24
48be: 10 92 2c 02 sts 0x022C, r1
48c2: 10 92 2b 02 sts 0x022B, r1
48c6: 02 c0 rjmp .+4 ; 0x48cc <MotorRegler+0x45e>
48c8: 10 92 2d 02 sts 0x022D, r1
48cc: 80 91 67 01 lds r24, 0x0167
48d0: 81 50 subi r24, 0x01 ; 1
48d2: 80 93 67 01 sts 0x0167, r24
48d6: 80 91 67 01 lds r24, 0x0167
48da: 8f 3f cpi r24, 0xFF ; 255
48dc: 29 f0 breq .+10 ; 0x48e8 <MotorRegler+0x47a>
48de: 80 91 0e 02 lds r24, 0x020E
48e2: 88 23 and r24, r24
48e4: 09 f4 brne .+2 ; 0x48e8 <MotorRegler+0x47a>
48e6: 12 c1 rjmp .+548 ; 0x4b0c <MotorRegler+0x69e>
48e8: 0e 94 7a 1d call 0x3af4 ; 0x3af4 <ParameterZuordnung>
48ec: e0 91 d4 04 lds r30, 0x04D4
48f0: ff 27 eor r31, r31
48f2: ee 0f add r30, r30
48f4: ff 1f adc r31, r31
48f6: df 01 movw r26, r30
48f8: a8 55 subi r26, 0x58 ; 88
48fa: bb 4f sbci r27, 0xFB ; 251
48fc: 8d 91 ld r24, X+
48fe: 9c 91 ld r25, X
4900: 60 91 e3 04 lds r22, 0x04E3
4904: 77 27 eor r23, r23
4906: e2 54 subi r30, 0x42 ; 66
4908: fb 4f sbci r31, 0xFB ; 251
490a: 20 81 ld r18, Z
490c: 31 81 ldd r19, Z+1 ; 0x01
490e: 40 91 e4 04 lds r20, 0x04E4
4912: 55 27 eor r21, r21
4914: fc 01 movw r30, r24
4916: e6 9f mul r30, r22
4918: c0 01 movw r24, r0
491a: e7 9f mul r30, r23
491c: 90 0d add r25, r0
491e: f6 9f mul r31, r22
4920: 90 0d add r25, r0
4922: 11 24 eor r1, r1
4924: d9 01 movw r26, r18
4926: a4 9f mul r26, r20
4928: 90 01 movw r18, r0
492a: a5 9f mul r26, r21
492c: 30 0d add r19, r0
492e: b4 9f mul r27, r20
4930: 30 0d add r19, r0
4932: 11 24 eor r1, r1
4934: 82 0f add r24, r18
4936: 93 1f adc r25, r19
4938: 90 93 1a 02 sts 0x021A, r25
493c: 80 93 19 02 sts 0x0219, r24
4940: e0 91 d5 04 lds r30, 0x04D5
4944: ff 27 eor r31, r31
4946: ee 0f add r30, r30
4948: ff 1f adc r31, r31
494a: df 01 movw r26, r30
494c: a8 55 subi r26, 0x58 ; 88
494e: bb 4f sbci r27, 0xFB ; 251
4950: 8d 91 ld r24, X+
4952: 9c 91 ld r25, X
4954: e2 54 subi r30, 0x42 ; 66
4956: fb 4f sbci r31, 0xFB ; 251
4958: 20 81 ld r18, Z
495a: 31 81 ldd r19, Z+1 ; 0x01
495c: fc 01 movw r30, r24
495e: e6 9f mul r30, r22
4960: c0 01 movw r24, r0
4962: e7 9f mul r30, r23
4964: 90 0d add r25, r0
4966: f6 9f mul r31, r22
4968: 90 0d add r25, r0
496a: 11 24 eor r1, r1
496c: b9 01 movw r22, r18
496e: 64 9f mul r22, r20
4970: 90 01 movw r18, r0
4972: 65 9f mul r22, r21
4974: 30 0d add r19, r0
4976: 74 9f mul r23, r20
4978: 30 0d add r19, r0
497a: 11 24 eor r1, r1
497c: 82 0f add r24, r18
497e: 93 1f adc r25, r19
4980: 90 93 1c 02 sts 0x021C, r25
4984: 80 93 1b 02 sts 0x021B, r24
4988: e0 91 d7 04 lds r30, 0x04D7
498c: ff 27 eor r31, r31
498e: ee 0f add r30, r30
4990: ff 1f adc r31, r31
4992: e8 55 subi r30, 0x58 ; 88
4994: fb 4f sbci r31, 0xFB ; 251
4996: 80 81 ld r24, Z
4998: 91 81 ldd r25, Z+1 ; 0x01
499a: 90 95 com r25
499c: 81 95 neg r24
499e: 9f 4f sbci r25, 0xFF ; 255
49a0: 90 93 1e 02 sts 0x021E, r25
49a4: 80 93 1d 02 sts 0x021D, r24
49a8: 10 91 85 01 lds r17, 0x0185
49ac: 61 2f mov r22, r17
49ae: 77 27 eor r23, r23
49b0: 67 fd sbrc r22, 7
49b2: 70 95 com r23
49b4: 87 2f mov r24, r23
49b6: 97 2f mov r25, r23
49b8: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
49bc: 17 ff sbrs r17, 7
49be: 06 c0 rjmp .+12 ; 0x49cc <MotorRegler+0x55e>
49c0: 20 e0 ldi r18, 0x00 ; 0
49c2: 30 e0 ldi r19, 0x00 ; 0
49c4: 40 e8 ldi r20, 0x80 ; 128
49c6: 53 e4 ldi r21, 0x43 ; 67
49c8: 0e 94 7c 2c call 0x58f8 ; 0x58f8 <__addsf3>
49cc: 20 e0 ldi r18, 0x00 ; 0
49ce: 30 e0 ldi r19, 0x00 ; 0
49d0: 40 e2 ldi r20, 0x20 ; 32
49d2: 51 e4 ldi r21, 0x41 ; 65
49d4: 0e 94 7c 2c call 0x58f8 ; 0x58f8 <__addsf3>
49d8: 20 e0 ldi r18, 0x00 ; 0
49da: 30 e0 ldi r19, 0x00 ; 0
49dc: 40 e8 ldi r20, 0x80 ; 128
49de: 5b e3 ldi r21, 0x3B ; 59
49e0: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
49e4: 5b 01 movw r10, r22
49e6: 6c 01 movw r12, r24
49e8: 60 93 26 05 sts 0x0526, r22
49ec: 70 93 27 05 sts 0x0527, r23
49f0: 80 93 28 05 sts 0x0528, r24
49f4: 90 93 29 05 sts 0x0529, r25
49f8: 10 91 86 01 lds r17, 0x0186
49fc: 61 2f mov r22, r17
49fe: 77 27 eor r23, r23
4a00: 67 fd sbrc r22, 7
4a02: 70 95 com r23
4a04: 87 2f mov r24, r23
4a06: 97 2f mov r25, r23
4a08: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
4a0c: 17 ff sbrs r17, 7
4a0e: 06 c0 rjmp .+12 ; 0x4a1c <MotorRegler+0x5ae>
4a10: 20 e0 ldi r18, 0x00 ; 0
4a12: 30 e0 ldi r19, 0x00 ; 0
4a14: 40 e8 ldi r20, 0x80 ; 128
4a16: 53 e4 ldi r21, 0x43 ; 67
4a18: 0e 94 7c 2c call 0x58f8 ; 0x58f8 <__addsf3>
4a1c: 20 e0 ldi r18, 0x00 ; 0
4a1e: 30 ee ldi r19, 0xE0 ; 224
4a20: 4b e2 ldi r20, 0x2B ; 43
4a22: 57 e4 ldi r21, 0x47 ; 71
4a24: 0e 94 be 2c call 0x597c ; 0x597c <__divsf3>
4a28: 60 93 15 05 sts 0x0515, r22
4a2c: 70 93 16 05 sts 0x0516, r23
4a30: 80 93 17 05 sts 0x0517, r24
4a34: 90 93 18 05 sts 0x0518, r25
4a38: 80 91 dc 04 lds r24, 0x04DC
4a3c: 82 ff sbrs r24, 2
4a3e: 0c c0 rjmp .+24 ; 0x4a58 <MotorRegler+0x5ea>
4a40: 80 e0 ldi r24, 0x00 ; 0
4a42: 90 e0 ldi r25, 0x00 ; 0
4a44: a0 e0 ldi r26, 0x00 ; 0
4a46: b0 e0 ldi r27, 0x00 ; 0
4a48: 80 93 15 05 sts 0x0515, r24
4a4c: 90 93 16 05 sts 0x0516, r25
4a50: a0 93 17 05 sts 0x0517, r26
4a54: b0 93 18 05 sts 0x0518, r27
4a58: 20 e0 ldi r18, 0x00 ; 0
4a5a: 30 e0 ldi r19, 0x00 ; 0
4a5c: 40 e0 ldi r20, 0x00 ; 0
4a5e: 50 e0 ldi r21, 0x00 ; 0
4a60: c6 01 movw r24, r12
4a62: b5 01 movw r22, r10
4a64: 0e 94 2b 2d call 0x5a56 ; 0x5a56 <__eqsf2>
4a68: 88 23 and r24, r24
4a6a: 64 f4 brge .+24 ; 0x4a84 <MotorRegler+0x616>
4a6c: 80 e0 ldi r24, 0x00 ; 0
4a6e: 90 e0 ldi r25, 0x00 ; 0
4a70: a0 e0 ldi r26, 0x00 ; 0
4a72: b0 e0 ldi r27, 0x00 ; 0
4a74: 80 93 26 05 sts 0x0526, r24
4a78: 90 93 27 05 sts 0x0527, r25
4a7c: a0 93 28 05 sts 0x0528, r26
4a80: b0 93 29 05 sts 0x0529, r27
4a84: 20 e0 ldi r18, 0x00 ; 0
4a86: 30 e0 ldi r19, 0x00 ; 0
4a88: 40 e0 ldi r20, 0x00 ; 0
4a8a: 50 e0 ldi r21, 0x00 ; 0
4a8c: 60 91 15 05 lds r22, 0x0515
4a90: 70 91 16 05 lds r23, 0x0516
4a94: 80 91 17 05 lds r24, 0x0517
4a98: 90 91 18 05 lds r25, 0x0518
4a9c: 0e 94 2b 2d call 0x5a56 ; 0x5a56 <__eqsf2>
4aa0: 88 23 and r24, r24
4aa2: 64 f4 brge .+24 ; 0x4abc <MotorRegler+0x64e>
4aa4: 80 e0 ldi r24, 0x00 ; 0
4aa6: 90 e0 ldi r25, 0x00 ; 0
4aa8: a0 e0 ldi r26, 0x00 ; 0
4aaa: b0 e0 ldi r27, 0x00 ; 0
4aac: 80 93 15 05 sts 0x0515, r24
4ab0: 90 93 16 05 sts 0x0516, r25
4ab4: a0 93 17 05 sts 0x0517, r26
4ab8: b0 93 18 05 sts 0x0518, r27
4abc: 80 91 0e 02 lds r24, 0x020E
4ac0: 88 23 and r24, r24
4ac2: 21 f1 breq .+72 ; 0x4b0c <MotorRegler+0x69e>
4ac4: 10 92 1e 02 sts 0x021E, r1
4ac8: 10 92 1d 02 sts 0x021D, r1
4acc: 10 92 1a 02 sts 0x021A, r1
4ad0: 10 92 19 02 sts 0x0219, r1
4ad4: 10 92 1c 02 sts 0x021C, r1
4ad8: 10 92 1b 02 sts 0x021B, r1
4adc: 8d ec ldi r24, 0xCD ; 205
4ade: 9c ec ldi r25, 0xCC ; 204
4ae0: ac ec ldi r26, 0xCC ; 204
4ae2: bd e3 ldi r27, 0x3D ; 61
4ae4: 80 93 26 05 sts 0x0526, r24
4ae8: 90 93 27 05 sts 0x0527, r25
4aec: a0 93 28 05 sts 0x0528, r26
4af0: b0 93 29 05 sts 0x0529, r27
4af4: 8a e0 ldi r24, 0x0A ; 10
4af6: 97 ed ldi r25, 0xD7 ; 215
4af8: a3 ea ldi r26, 0xA3 ; 163
4afa: bb e3 ldi r27, 0x3B ; 59
4afc: 80 93 15 05 sts 0x0515, r24
4b00: 90 93 16 05 sts 0x0516, r25
4b04: a0 93 17 05 sts 0x0517, r26
4b08: b0 93 18 05 sts 0x0518, r27
4b0c: 80 91 bf 01 lds r24, 0x01BF
4b10: 90 91 c0 01 lds r25, 0x01C0
4b14: 8d 54 subi r24, 0x4D ; 77
4b16: 91 40 sbci r25, 0x01 ; 1
4b18: 08 f4 brcc .+2 ; 0x4b1c <MotorRegler+0x6ae>
4b1a: 77 c0 rjmp .+238 ; 0x4c0a <MotorRegler+0x79c>
4b1c: a0 90 d7 01 lds r10, 0x01D7
4b20: b0 90 d8 01 lds r11, 0x01D8
4b24: c0 90 d9 01 lds r12, 0x01D9
4b28: d0 90 da 01 lds r13, 0x01DA
4b2c: 80 91 db 01 lds r24, 0x01DB
4b30: 90 91 dc 01 lds r25, 0x01DC
4b34: 8a 19 sub r24, r10
4b36: 9b 09 sbc r25, r11
4b38: 90 93 35 02 sts 0x0235, r25
4b3c: 80 93 34 02 sts 0x0234, r24
4b40: 40 91 df 01 lds r20, 0x01DF
4b44: 50 91 e0 01 lds r21, 0x01E0
4b48: 60 91 e1 01 lds r22, 0x01E1
4b4c: 70 91 e2 01 lds r23, 0x01E2
4b50: 20 91 e3 01 lds r18, 0x01E3
4b54: 30 91 e4 01 lds r19, 0x01E4
4b58: 24 1b sub r18, r20
4b5a: 35 0b sbc r19, r21
4b5c: 30 93 33 02 sts 0x0233, r19
4b60: 20 93 32 02 sts 0x0232, r18
4b64: 10 92 c0 01 sts 0x01C0, r1
4b68: 10 92 bf 01 sts 0x01BF, r1
4b6c: 87 3a cpi r24, 0xA7 ; 167
4b6e: 91 05 cpc r25, r1
4b70: 34 f0 brlt .+12 ; 0x4b7e <MotorRegler+0x710>
4b72: 80 91 d1 01 lds r24, 0x01D1
4b76: 90 91 d2 01 lds r25, 0x01D2
4b7a: 01 96 adiw r24, 0x01 ; 1
4b7c: 08 c0 rjmp .+16 ; 0x4b8e <MotorRegler+0x720>
4b7e: 8a 55 subi r24, 0x5A ; 90
4b80: 9f 4f sbci r25, 0xFF ; 255
4b82: 4c f4 brge .+18 ; 0x4b96 <MotorRegler+0x728>
4b84: 80 91 d1 01 lds r24, 0x01D1
4b88: 90 91 d2 01 lds r25, 0x01D2
4b8c: 01 97 sbiw r24, 0x01 ; 1
4b8e: 90 93 d2 01 sts 0x01D2, r25
4b92: 80 93 d1 01 sts 0x01D1, r24
4b96: 27 3a cpi r18, 0xA7 ; 167
4b98: 31 05 cpc r19, r1
4b9a: 34 f0 brlt .+12 ; 0x4ba8 <MotorRegler+0x73a>
4b9c: 80 91 d3 01 lds r24, 0x01D3
4ba0: 90 91 d4 01 lds r25, 0x01D4
4ba4: 01 96 adiw r24, 0x01 ; 1
4ba6: 08 c0 rjmp .+16 ; 0x4bb8 <MotorRegler+0x74a>
4ba8: 2a 55 subi r18, 0x5A ; 90
4baa: 3f 4f sbci r19, 0xFF ; 255
4bac: 4c f4 brge .+18 ; 0x4bc0 <MotorRegler+0x752>
4bae: 80 91 d3 01 lds r24, 0x01D3
4bb2: 90 91 d4 01 lds r25, 0x01D4
4bb6: 01 97 sbiw r24, 0x01 ; 1
4bb8: 90 93 d4 01 sts 0x01D4, r25
4bbc: 80 93 d3 01 sts 0x01D3, r24
4bc0: 10 92 7a 00 sts 0x007A, r1
4bc4: a0 92 ef 01 sts 0x01EF, r10
4bc8: b0 92 f0 01 sts 0x01F0, r11
4bcc: c0 92 f1 01 sts 0x01F1, r12
4bd0: d0 92 f2 01 sts 0x01F2, r13
4bd4: 40 93 f7 01 sts 0x01F7, r20
4bd8: 50 93 f8 01 sts 0x01F8, r21
4bdc: 60 93 f9 01 sts 0x01F9, r22
4be0: 70 93 fa 01 sts 0x01FA, r23
4be4: 80 91 e7 01 lds r24, 0x01E7
4be8: 90 91 e8 01 lds r25, 0x01E8
4bec: a0 91 e9 01 lds r26, 0x01E9
4bf0: b0 91 ea 01 lds r27, 0x01EA
4bf4: 80 93 ff 01 sts 0x01FF, r24
4bf8: 90 93 00 02 sts 0x0200, r25
4bfc: a0 93 01 02 sts 0x0201, r26
4c00: b0 93 02 02 sts 0x0202, r27
4c04: 8f ec ldi r24, 0xCF ; 207
4c06: 80 93 7a 00 sts 0x007A, r24
4c0a: e0 90 e8 04 lds r14, 0x04E8
4c0e: ff 24 eor r15, r15
4c10: 00 27 eor r16, r16
4c12: 11 27 eor r17, r17
4c14: 60 91 d7 01 lds r22, 0x01D7
4c18: 70 91 d8 01 lds r23, 0x01D8
4c1c: 80 91 d9 01 lds r24, 0x01D9
4c20: 90 91 da 01 lds r25, 0x01DA
4c24: a8 01 movw r20, r16
4c26: 97 01 movw r18, r14
4c28: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
4c2c: 80 91 21 05 lds r24, 0x0521
4c30: 90 91 22 05 lds r25, 0x0522
4c34: aa 27 eor r26, r26
4c36: 97 fd sbrc r25, 7
4c38: a0 95 com r26
4c3a: ba 2f mov r27, r26
4c3c: 28 1b sub r18, r24
4c3e: 39 0b sbc r19, r25
4c40: 4a 0b sbc r20, r26
4c42: 5b 0b sbc r21, r27
4c44: ca 01 movw r24, r20
4c46: b9 01 movw r22, r18
4c48: 20 e1 ldi r18, 0x10 ; 16
4c4a: 30 e0 ldi r19, 0x00 ; 0
4c4c: 40 e0 ldi r20, 0x00 ; 0
4c4e: 50 e0 ldi r21, 0x00 ; 0
4c50: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
4c54: 59 01 movw r10, r18
4c56: 6a 01 movw r12, r20
4c58: 20 93 3a 02 sts 0x023A, r18
4c5c: 30 93 3b 02 sts 0x023B, r19
4c60: 40 93 3c 02 sts 0x023C, r20
4c64: 50 93 3d 02 sts 0x023D, r21
4c68: 60 91 df 01 lds r22, 0x01DF
4c6c: 70 91 e0 01 lds r23, 0x01E0
4c70: 80 91 e1 01 lds r24, 0x01E1
4c74: 90 91 e2 01 lds r25, 0x01E2
4c78: a8 01 movw r20, r16
4c7a: 97 01 movw r18, r14
4c7c: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
4c80: 80 91 2a 05 lds r24, 0x052A
4c84: 90 91 2b 05 lds r25, 0x052B
4c88: aa 27 eor r26, r26
4c8a: 97 fd sbrc r25, 7
4c8c: a0 95 com r26
4c8e: ba 2f mov r27, r26
4c90: 28 1b sub r18, r24
4c92: 39 0b sbc r19, r25
4c94: 4a 0b sbc r20, r26
4c96: 5b 0b sbc r21, r27
4c98: ca 01 movw r24, r20
4c9a: b9 01 movw r22, r18
4c9c: 20 e1 ldi r18, 0x10 ; 16
4c9e: 30 e0 ldi r19, 0x00 ; 0
4ca0: 40 e0 ldi r20, 0x00 ; 0
4ca2: 50 e0 ldi r21, 0x00 ; 0
4ca4: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
4ca8: 20 93 36 02 sts 0x0236, r18
4cac: 30 93 37 02 sts 0x0237, r19
4cb0: 40 93 38 02 sts 0x0238, r20
4cb4: 50 93 39 02 sts 0x0239, r21
4cb8: e5 ef ldi r30, 0xF5 ; 245
4cba: ae 16 cp r10, r30
4cbc: e1 e0 ldi r30, 0x01 ; 1
4cbe: be 06 cpc r11, r30
4cc0: e0 e0 ldi r30, 0x00 ; 0
4cc2: ce 06 cpc r12, r30
4cc4: e0 e0 ldi r30, 0x00 ; 0
4cc6: de 06 cpc r13, r30
4cc8: 2c f0 brlt .+10 ; 0x4cd4 <MotorRegler+0x866>
4cca: 84 ef ldi r24, 0xF4 ; 244
4ccc: 91 e0 ldi r25, 0x01 ; 1
4cce: a0 e0 ldi r26, 0x00 ; 0
4cd0: b0 e0 ldi r27, 0x00 ; 0
4cd2: 0d c0 rjmp .+26 ; 0x4cee <MotorRegler+0x880>
4cd4: fc e0 ldi r31, 0x0C ; 12
4cd6: af 16 cp r10, r31
4cd8: fe ef ldi r31, 0xFE ; 254
4cda: bf 06 cpc r11, r31
4cdc: ff ef ldi r31, 0xFF ; 255
4cde: cf 06 cpc r12, r31
4ce0: ff ef ldi r31, 0xFF ; 255
4ce2: df 06 cpc r13, r31
4ce4: 64 f4 brge .+24 ; 0x4cfe <MotorRegler+0x890>
4ce6: 8c e0 ldi r24, 0x0C ; 12
4ce8: 9e ef ldi r25, 0xFE ; 254
4cea: af ef ldi r26, 0xFF ; 255
4cec: bf ef ldi r27, 0xFF ; 255
4cee: 80 93 3a 02 sts 0x023A, r24
4cf2: 90 93 3b 02 sts 0x023B, r25
4cf6: a0 93 3c 02 sts 0x023C, r26
4cfa: b0 93 3d 02 sts 0x023D, r27
4cfe: 25 3f cpi r18, 0xF5 ; 245
4d00: 61 e0 ldi r22, 0x01 ; 1
4d02: 36 07 cpc r19, r22
4d04: 60 e0 ldi r22, 0x00 ; 0
4d06: 46 07 cpc r20, r22
4d08: 60 e0 ldi r22, 0x00 ; 0
4d0a: 56 07 cpc r21, r22
4d0c: 2c f0 brlt .+10 ; 0x4d18 <MotorRegler+0x8aa>
4d0e: 84 ef ldi r24, 0xF4 ; 244
4d10: 91 e0 ldi r25, 0x01 ; 1
4d12: a0 e0 ldi r26, 0x00 ; 0
4d14: b0 e0 ldi r27, 0x00 ; 0
4d16: 09 c0 rjmp .+18 ; 0x4d2a <MotorRegler+0x8bc>
4d18: 2c 50 subi r18, 0x0C ; 12
4d1a: 3e 4f sbci r19, 0xFE ; 254
4d1c: 4f 4f sbci r20, 0xFF ; 255
4d1e: 5f 4f sbci r21, 0xFF ; 255
4d20: 64 f4 brge .+24 ; 0x4d3a <MotorRegler+0x8cc>
4d22: 8c e0 ldi r24, 0x0C ; 12
4d24: 9e ef ldi r25, 0xFE ; 254
4d26: af ef ldi r26, 0xFF ; 255
4d28: bf ef ldi r27, 0xFF ; 255
4d2a: 80 93 36 02 sts 0x0236, r24
4d2e: 90 93 37 02 sts 0x0237, r25
4d32: a0 93 38 02 sts 0x0238, r26
4d36: b0 93 39 02 sts 0x0239, r27
4d3a: 10 92 7a 00 sts 0x007A, r1
4d3e: 80 91 eb 01 lds r24, 0x01EB
4d42: 90 91 ec 01 lds r25, 0x01EC
4d46: a0 91 ed 01 lds r26, 0x01ED
4d4a: b0 91 ee 01 lds r27, 0x01EE
4d4e: 20 91 3a 02 lds r18, 0x023A
4d52: 30 91 3b 02 lds r19, 0x023B
4d56: 40 91 3c 02 lds r20, 0x023C
4d5a: 50 91 3d 02 lds r21, 0x023D
4d5e: 82 1b sub r24, r18
4d60: 93 0b sbc r25, r19
4d62: a4 0b sbc r26, r20
4d64: b5 0b sbc r27, r21
4d66: 80 93 eb 01 sts 0x01EB, r24
4d6a: 90 93 ec 01 sts 0x01EC, r25
4d6e: a0 93 ed 01 sts 0x01ED, r26
4d72: b0 93 ee 01 sts 0x01EE, r27
4d76: 80 91 f3 01 lds r24, 0x01F3
4d7a: 90 91 f4 01 lds r25, 0x01F4
4d7e: a0 91 f5 01 lds r26, 0x01F5
4d82: b0 91 f6 01 lds r27, 0x01F6
4d86: 20 91 36 02 lds r18, 0x0236
4d8a: 30 91 37 02 lds r19, 0x0237
4d8e: 40 91 38 02 lds r20, 0x0238
4d92: 50 91 39 02 lds r21, 0x0239
4d96: 82 1b sub r24, r18
4d98: 93 0b sbc r25, r19
4d9a: a4 0b sbc r26, r20
4d9c: b5 0b sbc r27, r21
4d9e: 80 93 f3 01 sts 0x01F3, r24
4da2: 90 93 f4 01 sts 0x01F4, r25
4da6: a0 93 f5 01 sts 0x01F5, r26
4daa: b0 93 f6 01 sts 0x01F6, r27
4dae: 80 90 1d 02 lds r8, 0x021D
4db2: 90 90 1e 02 lds r9, 0x021E
4db6: 54 01 movw r10, r8
4db8: 97 fe sbrs r9, 7
4dba: 04 c0 rjmp .+8 ; 0x4dc4 <MotorRegler+0x956>
4dbc: aa 24 eor r10, r10
4dbe: bb 24 eor r11, r11
4dc0: a8 18 sub r10, r8
4dc2: b9 08 sbc r11, r9
4dc4: 85 e1 ldi r24, 0x15 ; 21
4dc6: a8 16 cp r10, r24
4dc8: b1 04 cpc r11, r1
4dca: 3c f0 brlt .+14 ; 0x4dda <MotorRegler+0x96c>
4dcc: 80 91 dc 04 lds r24, 0x04DC
4dd0: 84 fd sbrc r24, 4
4dd2: 03 c0 rjmp .+6 ; 0x4dda <MotorRegler+0x96c>
4dd4: 81 e0 ldi r24, 0x01 ; 1
4dd6: 80 93 8a 01 sts 0x018A, r24
4dda: e0 90 e5 04 lds r14, 0x04E5
4dde: cc 24 eor r12, r12
4de0: b7 fc sbrc r11, 7
4de2: c0 94 com r12
4de4: dc 2c mov r13, r12
4de6: b4 01 movw r22, r8
4de8: 88 27 eor r24, r24
4dea: 77 fd sbrc r23, 7
4dec: 80 95 com r24
4dee: 98 2f mov r25, r24
4df0: 2e 2d mov r18, r14
4df2: 33 27 eor r19, r19
4df4: 44 27 eor r20, r20
4df6: 55 27 eor r21, r21
4df8: 0e 94 e3 2d call 0x5bc6 ; 0x5bc6 <__mulsi3>
4dfc: 9b 01 movw r18, r22
4dfe: ac 01 movw r20, r24
4e00: c6 01 movw r24, r12
4e02: b5 01 movw r22, r10
4e04: 0e 94 e3 2d call 0x5bc6 ; 0x5bc6 <__mulsi3>
4e08: 20 e0 ldi r18, 0x00 ; 0
4e0a: 32 e0 ldi r19, 0x02 ; 2
4e0c: 40 e0 ldi r20, 0x00 ; 0
4e0e: 50 e0 ldi r21, 0x00 ; 0
4e10: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
4e14: 89 01 movw r16, r18
4e16: 9a 01 movw r18, r20
4e18: ff 24 eor r15, r15
4e1a: e8 9c mul r14, r8
4e1c: c0 01 movw r24, r0
4e1e: e9 9c mul r14, r9
4e20: 90 0d add r25, r0
4e22: f8 9c mul r15, r8
4e24: 90 0d add r25, r0
4e26: 11 24 eor r1, r1
4e28: 64 e0 ldi r22, 0x04 ; 4
4e2a: 70 e0 ldi r23, 0x00 ; 0
4e2c: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
4e30: 60 0f add r22, r16
4e32: 71 1f adc r23, r17
4e34: 88 27 eor r24, r24
4e36: 77 fd sbrc r23, 7
4e38: 80 95 com r24
4e3a: 98 2f mov r25, r24
4e3c: 60 93 3e 02 sts 0x023E, r22
4e40: 70 93 3f 02 sts 0x023F, r23
4e44: 80 93 40 02 sts 0x0240, r24
4e48: 90 93 41 02 sts 0x0241, r25
4e4c: 20 91 fb 01 lds r18, 0x01FB
4e50: 30 91 fc 01 lds r19, 0x01FC
4e54: 40 91 fd 01 lds r20, 0x01FD
4e58: 50 91 fe 01 lds r21, 0x01FE
4e5c: 26 1b sub r18, r22
4e5e: 37 0b sbc r19, r23
4e60: 48 0b sbc r20, r24
4e62: 59 0b sbc r21, r25
4e64: 20 93 fb 01 sts 0x01FB, r18
4e68: 30 93 fc 01 sts 0x01FC, r19
4e6c: 40 93 fd 01 sts 0x01FD, r20
4e70: 50 93 fe 01 sts 0x01FE, r21
4e74: 80 91 fb 01 lds r24, 0x01FB
4e78: 90 91 fc 01 lds r25, 0x01FC
4e7c: a0 91 fd 01 lds r26, 0x01FD
4e80: b0 91 fe 01 lds r27, 0x01FE
4e84: 81 55 subi r24, 0x51 ; 81
4e86: 93 4c sbci r25, 0xC3 ; 195
4e88: a0 40 sbci r26, 0x00 ; 0
4e8a: b0 40 sbci r27, 0x00 ; 0
4e8c: 64 f0 brlt .+24 ; 0x4ea6 <MotorRegler+0xa38>
4e8e: 80 e5 ldi r24, 0x50 ; 80
4e90: 93 ec ldi r25, 0xC3 ; 195
4e92: a0 e0 ldi r26, 0x00 ; 0
4e94: b0 e0 ldi r27, 0x00 ; 0
4e96: 80 93 fb 01 sts 0x01FB, r24
4e9a: 90 93 fc 01 sts 0x01FC, r25
4e9e: a0 93 fd 01 sts 0x01FD, r26
4ea2: b0 93 fe 01 sts 0x01FE, r27
4ea6: 80 91 fb 01 lds r24, 0x01FB
4eaa: 90 91 fc 01 lds r25, 0x01FC
4eae: a0 91 fd 01 lds r26, 0x01FD
4eb2: b0 91 fe 01 lds r27, 0x01FE
4eb6: 80 5b subi r24, 0xB0 ; 176
4eb8: 9c 43 sbci r25, 0x3C ; 60
4eba: af 4f sbci r26, 0xFF ; 255
4ebc: bf 4f sbci r27, 0xFF ; 255
4ebe: 64 f4 brge .+24 ; 0x4ed8 <MotorRegler+0xa6a>
4ec0: 80 eb ldi r24, 0xB0 ; 176
4ec2: 9c e3 ldi r25, 0x3C ; 60
4ec4: af ef ldi r26, 0xFF ; 255
4ec6: bf ef ldi r27, 0xFF ; 255
4ec8: 80 93 fb 01 sts 0x01FB, r24
4ecc: 90 93 fc 01 sts 0x01FC, r25
4ed0: a0 93 fd 01 sts 0x01FD, r26
4ed4: b0 93 fe 01 sts 0x01FE, r27
4ed8: 8f ec ldi r24, 0xCF ; 207
4eda: 80 93 7a 00 sts 0x007A, r24
4ede: 80 91 dc 04 lds r24, 0x04DC
4ee2: 83 ff sbrs r24, 3
4ee4: a7 c0 rjmp .+334 ; 0x5034 <MotorRegler+0xbc6>
4ee6: 80 91 0d 02 lds r24, 0x020D
4eea: 81 50 subi r24, 0x01 ; 1
4eec: 80 93 0d 02 sts 0x020D, r24
4ef0: 8f 3f cpi r24, 0xFF ; 255
4ef2: d9 f4 brne .+54 ; 0x4f2a <MotorRegler+0xabc>
4ef4: 0e 94 af 14 call 0x295e ; 0x295e <heading_MM3>
4ef8: 90 93 08 02 sts 0x0208, r25
4efc: 80 93 07 02 sts 0x0207, r24
4f00: 20 91 09 02 lds r18, 0x0209
4f04: 30 91 0a 02 lds r19, 0x020A
4f08: 82 1b sub r24, r18
4f0a: 93 0b sbc r25, r19
4f0c: 84 5e subi r24, 0xE4 ; 228
4f0e: 9d 4f sbci r25, 0xFD ; 253
4f10: 68 e6 ldi r22, 0x68 ; 104
4f12: 71 e0 ldi r23, 0x01 ; 1
4f14: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
4f18: 84 5b subi r24, 0xB4 ; 180
4f1a: 90 40 sbci r25, 0x00 ; 0
4f1c: 90 93 0c 02 sts 0x020C, r25
4f20: 80 93 0b 02 sts 0x020B, r24
4f24: 82 e3 ldi r24, 0x32 ; 50
4f26: 80 93 0d 02 sts 0x020D, r24
4f2a: 60 91 d7 01 lds r22, 0x01D7
4f2e: 70 91 d8 01 lds r23, 0x01D8
4f32: 80 91 d9 01 lds r24, 0x01D9
4f36: 90 91 da 01 lds r25, 0x01DA
4f3a: 20 e0 ldi r18, 0x00 ; 0
4f3c: 32 e0 ldi r19, 0x02 ; 2
4f3e: 40 e0 ldi r20, 0x00 ; 0
4f40: 50 e0 ldi r21, 0x00 ; 0
4f42: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
4f46: 89 01 movw r16, r18
4f48: 37 ff sbrs r19, 7
4f4a: 03 c0 rjmp .+6 ; 0x4f52 <MotorRegler+0xae4>
4f4c: 10 95 com r17
4f4e: 01 95 neg r16
4f50: 1f 4f sbci r17, 0xFF ; 255
4f52: 60 91 df 01 lds r22, 0x01DF
4f56: 70 91 e0 01 lds r23, 0x01E0
4f5a: 80 91 e1 01 lds r24, 0x01E1
4f5e: 90 91 e2 01 lds r25, 0x01E2
4f62: 20 e0 ldi r18, 0x00 ; 0
4f64: 32 e0 ldi r19, 0x02 ; 2
4f66: 40 e0 ldi r20, 0x00 ; 0
4f68: 50 e0 ldi r21, 0x00 ; 0
4f6a: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
4f6e: b9 01 movw r22, r18
4f70: 37 ff sbrs r19, 7
4f72: 03 c0 rjmp .+6 ; 0x4f7a <MotorRegler+0xb0c>
4f74: 70 95 com r23
4f76: 61 95 neg r22
4f78: 7f 4f sbci r23, 0xFF ; 255
4f7a: 60 17 cp r22, r16
4f7c: 71 07 cpc r23, r17
4f7e: 0c f4 brge .+2 ; 0x4f82 <MotorRegler+0xb14>
4f80: b8 01 movw r22, r16
4f82: 63 32 cpi r22, 0x23 ; 35
4f84: 71 05 cpc r23, r1
4f86: 74 f4 brge .+28 ; 0x4fa4 <MotorRegler+0xb36>
4f88: 80 91 8a 01 lds r24, 0x018A
4f8c: 88 23 and r24, r24
4f8e: 51 f0 breq .+20 ; 0x4fa4 <MotorRegler+0xb36>
4f90: 80 91 07 02 lds r24, 0x0207
4f94: 90 91 08 02 lds r25, 0x0208
4f98: 90 93 0a 02 sts 0x020A, r25
4f9c: 80 93 09 02 sts 0x0209, r24
4fa0: 10 92 8a 01 sts 0x018A, r1
4fa4: 20 91 84 01 lds r18, 0x0184
4fa8: 33 27 eor r19, r19
4faa: 62 9f mul r22, r18
4fac: c0 01 movw r24, r0
4fae: 63 9f mul r22, r19
4fb0: 90 0d add r25, r0
4fb2: 72 9f mul r23, r18
4fb4: 90 0d add r25, r0
4fb6: 11 24 eor r1, r1
4fb8: 60 e4 ldi r22, 0x40 ; 64
4fba: 70 e0 ldi r23, 0x00 ; 0
4fbc: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
4fc0: a9 01 movw r20, r18
4fc2: 46 1b sub r20, r22
4fc4: 57 0b sbc r21, r23
4fc6: 14 16 cp r1, r20
4fc8: 15 06 cpc r1, r21
4fca: 74 f5 brge .+92 ; 0x5028 <MotorRegler+0xbba>
4fcc: 10 92 7a 00 sts 0x007A, r1
4fd0: 00 91 fb 01 lds r16, 0x01FB
4fd4: 10 91 fc 01 lds r17, 0x01FC
4fd8: 20 91 fd 01 lds r18, 0x01FD
4fdc: 30 91 fe 01 lds r19, 0x01FE
4fe0: 80 91 0b 02 lds r24, 0x020B
4fe4: 90 91 0c 02 lds r25, 0x020C
4fe8: bc 01 movw r22, r24
4fea: 46 9f mul r20, r22
4fec: c0 01 movw r24, r0
4fee: 47 9f mul r20, r23
4ff0: 90 0d add r25, r0
4ff2: 56 9f mul r21, r22
4ff4: 90 0d add r25, r0
4ff6: 11 24 eor r1, r1
4ff8: 60 e2 ldi r22, 0x20 ; 32
4ffa: 70 e0 ldi r23, 0x00 ; 0
4ffc: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
5000: 88 27 eor r24, r24
5002: 77 fd sbrc r23, 7
5004: 80 95 com r24
5006: 98 2f mov r25, r24
5008: 06 0f add r16, r22
500a: 17 1f adc r17, r23
500c: 28 1f adc r18, r24
500e: 39 1f adc r19, r25
5010: 00 93 fb 01 sts 0x01FB, r16
5014: 10 93 fc 01 sts 0x01FC, r17
5018: 20 93 fd 01 sts 0x01FD, r18
501c: 30 93 fe 01 sts 0x01FE, r19
5020: 8f ec ldi r24, 0xCF ; 207
5022: 80 93 7a 00 sts 0x007A, r24
5026: 06 c0 rjmp .+12 ; 0x5034 <MotorRegler+0xbc6>
5028: 84 e6 ldi r24, 0x64 ; 100
502a: 90 e0 ldi r25, 0x00 ; 0
502c: 90 93 a7 01 sts 0x01A7, r25
5030: 80 93 a6 01 sts 0x01A6, r24
5034: 80 91 59 04 lds r24, 0x0459
5038: 8f 5f subi r24, 0xFF ; 255
503a: 80 93 59 04 sts 0x0459, r24
503e: 80 91 28 02 lds r24, 0x0228
5042: 81 50 subi r24, 0x01 ; 1
5044: 80 93 28 02 sts 0x0228, r24
5048: 8f 3f cpi r24, 0xFF ; 255
504a: 09 f0 breq .+2 ; 0x504e <MotorRegler+0xbe0>
504c: 66 c0 rjmp .+204 ; 0x511a <MotorRegler+0xcac>
504e: 81 e3 ldi r24, 0x31 ; 49
5050: 80 93 28 02 sts 0x0228, r24
5054: e0 90 e8 04 lds r14, 0x04E8
5058: ff 24 eor r15, r15
505a: 00 27 eor r16, r16
505c: 11 27 eor r17, r17
505e: 60 91 d7 01 lds r22, 0x01D7
5062: 70 91 d8 01 lds r23, 0x01D8
5066: 80 91 d9 01 lds r24, 0x01D9
506a: 90 91 da 01 lds r25, 0x01DA
506e: a8 01 movw r20, r16
5070: 97 01 movw r18, r14
5072: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
5076: 30 93 5b 04 sts 0x045B, r19
507a: 20 93 5a 04 sts 0x045A, r18
507e: 60 91 df 01 lds r22, 0x01DF
5082: 70 91 e0 01 lds r23, 0x01E0
5086: 80 91 e1 01 lds r24, 0x01E1
508a: 90 91 e2 01 lds r25, 0x01E2
508e: a8 01 movw r20, r16
5090: 97 01 movw r18, r14
5092: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
5096: 30 93 5d 04 sts 0x045D, r19
509a: 20 93 5c 04 sts 0x045C, r18
509e: 80 91 21 05 lds r24, 0x0521
50a2: 90 91 22 05 lds r25, 0x0522
50a6: 90 93 5f 04 sts 0x045F, r25
50aa: 80 93 5e 04 sts 0x045E, r24
50ae: 80 91 2a 05 lds r24, 0x052A
50b2: 90 91 2b 05 lds r25, 0x052B
50b6: 90 93 61 04 sts 0x0461, r25
50ba: 80 93 60 04 sts 0x0460, r24
50be: 80 91 24 05 lds r24, 0x0524
50c2: 90 91 25 05 lds r25, 0x0525
50c6: 90 93 63 04 sts 0x0463, r25
50ca: 80 93 62 04 sts 0x0462, r24
50ce: 80 91 20 02 lds r24, 0x0220
50d2: 90 91 21 02 lds r25, 0x0221
50d6: 90 93 65 04 sts 0x0465, r25
50da: 80 93 64 04 sts 0x0464, r24
50de: 60 91 03 02 lds r22, 0x0203
50e2: 70 91 04 02 lds r23, 0x0204
50e6: 80 91 05 02 lds r24, 0x0205
50ea: 90 91 06 02 lds r25, 0x0206
50ee: 20 e0 ldi r18, 0x00 ; 0
50f0: 32 e0 ldi r19, 0x02 ; 2
50f2: 40 e0 ldi r20, 0x00 ; 0
50f4: 50 e0 ldi r21, 0x00 ; 0
50f6: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
50fa: 30 93 67 04 sts 0x0467, r19
50fe: 20 93 66 04 sts 0x0466, r18
5102: 50 92 69 04 sts 0x0469, r5
5106: 40 92 68 04 sts 0x0468, r4
510a: 80 91 07 02 lds r24, 0x0207
510e: 90 91 08 02 lds r25, 0x0208
5112: 90 93 6b 04 sts 0x046B, r25
5116: 80 93 6a 04 sts 0x046A, r24
511a: 60 90 15 05 lds r6, 0x0515
511e: 70 90 16 05 lds r7, 0x0516
5122: 80 90 17 05 lds r8, 0x0517
5126: 90 90 18 05 lds r9, 0x0518
512a: a0 90 26 05 lds r10, 0x0526
512e: b0 90 27 05 lds r11, 0x0527
5132: c0 90 28 05 lds r12, 0x0528
5136: d0 90 29 05 lds r13, 0x0529
513a: 60 91 d7 01 lds r22, 0x01D7
513e: 70 91 d8 01 lds r23, 0x01D8
5142: 80 91 d9 01 lds r24, 0x01D9
5146: 90 91 da 01 lds r25, 0x01DA
514a: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
514e: a4 01 movw r20, r8
5150: 93 01 movw r18, r6
5152: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
5156: 7b 01 movw r14, r22
5158: 8c 01 movw r16, r24
515a: 60 91 10 05 lds r22, 0x0510
515e: 70 91 11 05 lds r23, 0x0511
5162: 88 27 eor r24, r24
5164: 77 fd sbrc r23, 7
5166: 80 95 com r24
5168: 98 2f mov r25, r24
516a: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
516e: a6 01 movw r20, r12
5170: 95 01 movw r18, r10
5172: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
5176: 9b 01 movw r18, r22
5178: ac 01 movw r20, r24
517a: c8 01 movw r24, r16
517c: b7 01 movw r22, r14
517e: 0e 94 7c 2c call 0x58f8 ; 0x58f8 <__addsf3>
5182: 0e 94 04 2d call 0x5a08 ; 0x5a08 <__fixsfsi>
5186: 1b 01 movw r2, r22
5188: 70 93 11 05 sts 0x0511, r23
518c: 60 93 10 05 sts 0x0510, r22
5190: 60 91 df 01 lds r22, 0x01DF
5194: 70 91 e0 01 lds r23, 0x01E0
5198: 80 91 e1 01 lds r24, 0x01E1
519c: 90 91 e2 01 lds r25, 0x01E2
51a0: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
51a4: a4 01 movw r20, r8
51a6: 93 01 movw r18, r6
51a8: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
51ac: 7b 01 movw r14, r22
51ae: 8c 01 movw r16, r24
51b0: 60 91 0e 05 lds r22, 0x050E
51b4: 70 91 0f 05 lds r23, 0x050F
51b8: 88 27 eor r24, r24
51ba: 77 fd sbrc r23, 7
51bc: 80 95 com r24
51be: 98 2f mov r25, r24
51c0: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
51c4: a6 01 movw r20, r12
51c6: 95 01 movw r18, r10
51c8: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
51cc: 9b 01 movw r18, r22
51ce: ac 01 movw r20, r24
51d0: c8 01 movw r24, r16
51d2: b7 01 movw r22, r14
51d4: 0e 94 7c 2c call 0x58f8 ; 0x58f8 <__addsf3>
51d8: 0e 94 04 2d call 0x5a08 ; 0x5a08 <__fixsfsi>
51dc: 7e 83 std Y+6, r23 ; 0x06
51de: 6d 83 std Y+5, r22 ; 0x05
51e0: 70 93 0f 05 sts 0x050F, r23
51e4: 60 93 0e 05 sts 0x050E, r22
51e8: 60 91 24 05 lds r22, 0x0524
51ec: 70 91 25 05 lds r23, 0x0525
51f0: 88 27 eor r24, r24
51f2: 77 fd sbrc r23, 7
51f4: 80 95 com r24
51f6: 98 2f mov r25, r24
51f8: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
51fc: 7b 01 movw r14, r22
51fe: 8c 01 movw r16, r24
5200: 20 e0 ldi r18, 0x00 ; 0
5202: 30 e0 ldi r19, 0x00 ; 0
5204: 40 e0 ldi r20, 0x00 ; 0
5206: 5f e3 ldi r21, 0x3F ; 63
5208: c6 01 movw r24, r12
520a: b5 01 movw r22, r10
520c: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
5210: 9b 01 movw r18, r22
5212: ac 01 movw r20, r24
5214: c8 01 movw r24, r16
5216: b7 01 movw r22, r14
5218: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
521c: 7b 01 movw r14, r22
521e: 8c 01 movw r16, r24
5220: 60 91 e7 01 lds r22, 0x01E7
5224: 70 91 e8 01 lds r23, 0x01E8
5228: 80 91 e9 01 lds r24, 0x01E9
522c: 90 91 ea 01 lds r25, 0x01EA
5230: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
5234: a4 01 movw r20, r8
5236: 93 01 movw r18, r6
5238: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
523c: 9b 01 movw r18, r22
523e: ac 01 movw r20, r24
5240: c8 01 movw r24, r16
5242: b7 01 movw r22, r14
5244: 0e 94 7c 2c call 0x58f8 ; 0x58f8 <__addsf3>
5248: 0e 94 04 2d call 0x5a08 ; 0x5a08 <__fixsfsi>
524c: 9b 01 movw r18, r22
524e: 70 93 25 05 sts 0x0525, r23
5252: 60 93 24 05 sts 0x0524, r22
5256: 71 e0 ldi r23, 0x01 ; 1
5258: 27 16 cp r2, r23
525a: 78 e0 ldi r23, 0x08 ; 8
525c: 37 06 cpc r3, r23
525e: 1c f0 brlt .+6 ; 0x5266 <MotorRegler+0xdf8>
5260: 80 e0 ldi r24, 0x00 ; 0
5262: 98 e0 ldi r25, 0x08 ; 8
5264: 07 c0 rjmp .+14 ; 0x5274 <MotorRegler+0xe06>
5266: 80 e0 ldi r24, 0x00 ; 0
5268: 28 16 cp r2, r24
526a: 88 ef ldi r24, 0xF8 ; 248
526c: 38 06 cpc r3, r24
526e: 34 f4 brge .+12 ; 0x527c <MotorRegler+0xe0e>
5270: 80 e0 ldi r24, 0x00 ; 0
5272: 98 ef ldi r25, 0xF8 ; 248
5274: 90 93 11 05 sts 0x0511, r25
5278: 80 93 10 05 sts 0x0510, r24
527c: ad 81 ldd r26, Y+5 ; 0x05
527e: be 81 ldd r27, Y+6 ; 0x06
5280: a1 50 subi r26, 0x01 ; 1
5282: b8 40 sbci r27, 0x08 ; 8
5284: 1c f0 brlt .+6 ; 0x528c <MotorRegler+0xe1e>
5286: 80 e0 ldi r24, 0x00 ; 0
5288: 98 e0 ldi r25, 0x08 ; 8
528a: 07 c0 rjmp .+14 ; 0x529a <MotorRegler+0xe2c>
528c: 4d 81 ldd r20, Y+5 ; 0x05
528e: 5e 81 ldd r21, Y+6 ; 0x06
5290: 40 50 subi r20, 0x00 ; 0
5292: 58 4f sbci r21, 0xF8 ; 248
5294: 34 f4 brge .+12 ; 0x52a2 <MotorRegler+0xe34>
5296: 80 e0 ldi r24, 0x00 ; 0
5298: 98 ef ldi r25, 0xF8 ; 248
529a: 90 93 0f 05 sts 0x050F, r25
529e: 80 93 0e 05 sts 0x050E, r24
52a2: 78 e0 ldi r23, 0x08 ; 8
52a4: 21 30 cpi r18, 0x01 ; 1
52a6: 37 07 cpc r19, r23
52a8: 1c f0 brlt .+6 ; 0x52b0 <MotorRegler+0xe42>
52aa: 80 e0 ldi r24, 0x00 ; 0
52ac: 98 e0 ldi r25, 0x08 ; 8
52ae: 05 c0 rjmp .+10 ; 0x52ba <MotorRegler+0xe4c>
52b0: 20 50 subi r18, 0x00 ; 0
52b2: 38 4f sbci r19, 0xF8 ; 248
52b4: 34 f4 brge .+12 ; 0x52c2 <MotorRegler+0xe54>
52b6: 80 e0 ldi r24, 0x00 ; 0
52b8: 98 ef ldi r25, 0xF8 ; 248
52ba: 90 93 25 05 sts 0x0525, r25
52be: 80 93 24 05 sts 0x0524, r24
52c2: 80 91 dc 04 lds r24, 0x04DC
52c6: 99 27 eor r25, r25
52c8: 80 ff sbrs r24, 0
52ca: be c0 rjmp .+380 ; 0x5448 <MotorRegler+0xfda>
52cc: 20 91 81 01 lds r18, 0x0181
52d0: 81 ff sbrs r24, 1
52d2: 0e c0 rjmp .+28 ; 0x52f0 <MotorRegler+0xe82>
52d4: 22 33 cpi r18, 0x32 ; 50
52d6: b0 f4 brcc .+44 ; 0x5304 <MotorRegler+0xe96>
52d8: 80 91 20 02 lds r24, 0x0220
52dc: 90 91 21 02 lds r25, 0x0221
52e0: 44 97 sbiw r24, 0x14 ; 20
52e2: 90 93 23 02 sts 0x0223, r25
52e6: 80 93 22 02 sts 0x0222, r24
52ea: 10 92 0f 02 sts 0x020F, r1
52ee: 0d c0 rjmp .+26 ; 0x530a <MotorRegler+0xe9c>
52f0: 80 91 e1 04 lds r24, 0x04E1
52f4: 28 9f mul r18, r24
52f6: c0 01 movw r24, r0
52f8: 11 24 eor r1, r1
52fa: 44 97 sbiw r24, 0x14 ; 20
52fc: 90 93 23 02 sts 0x0223, r25
5300: 80 93 22 02 sts 0x0222, r24
5304: 81 e0 ldi r24, 0x01 ; 1
5306: 80 93 0f 02 sts 0x020F, r24
530a: 80 91 0e 02 lds r24, 0x020E
530e: 88 23 and r24, r24
5310: 21 f0 breq .+8 ; 0x531a <MotorRegler+0xeac>
5312: 10 92 23 02 sts 0x0223, r1
5316: 10 92 22 02 sts 0x0222, r1
531a: 20 91 20 02 lds r18, 0x0220
531e: 30 91 21 02 lds r19, 0x0221
5322: 40 91 22 02 lds r20, 0x0222
5326: 50 91 23 02 lds r21, 0x0223
532a: 42 17 cp r20, r18
532c: 53 07 cpc r21, r19
532e: 0c f0 brlt .+2 ; 0x5332 <MotorRegler+0xec4>
5330: 8b c0 rjmp .+278 ; 0x5448 <MotorRegler+0xfda>
5332: 80 91 0f 02 lds r24, 0x020F
5336: 88 23 and r24, r24
5338: 09 f4 brne .+2 ; 0x533c <MotorRegler+0xece>
533a: 86 c0 rjmp .+268 ; 0x5448 <MotorRegler+0xfda>
533c: 24 1b sub r18, r20
533e: 35 0b sbc r19, r21
5340: 80 91 82 01 lds r24, 0x0182
5344: 99 27 eor r25, r25
5346: dc 01 movw r26, r24
5348: 2a 9f mul r18, r26
534a: c0 01 movw r24, r0
534c: 2b 9f mul r18, r27
534e: 90 0d add r25, r0
5350: 3a 9f mul r19, r26
5352: 90 0d add r25, r0
5354: 11 24 eor r1, r1
5356: 60 e1 ldi r22, 0x10 ; 16
5358: 70 e0 ldi r23, 0x00 ; 0
535a: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
535e: 82 01 movw r16, r4
5360: 06 1b sub r16, r22
5362: 17 0b sbc r17, r23
5364: 20 91 bd 01 lds r18, 0x01BD
5368: 30 91 be 01 lds r19, 0x01BE
536c: 80 91 80 01 lds r24, 0x0180
5370: 99 27 eor r25, r25
5372: fc 01 movw r30, r24
5374: 2e 9f mul r18, r30
5376: c0 01 movw r24, r0
5378: 2f 9f mul r18, r31
537a: 90 0d add r25, r0
537c: 3e 9f mul r19, r30
537e: 90 0d add r25, r0
5380: 11 24 eor r1, r1
5382: 68 e0 ldi r22, 0x08 ; 8
5384: 70 e0 ldi r23, 0x00 ; 0
5386: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
538a: 06 1b sub r16, r22
538c: 17 0b sbc r17, r23
538e: 60 91 03 02 lds r22, 0x0203
5392: 70 91 04 02 lds r23, 0x0204
5396: 80 91 05 02 lds r24, 0x0205
539a: 90 91 06 02 lds r25, 0x0206
539e: 20 e0 ldi r18, 0x00 ; 0
53a0: 32 e0 ldi r19, 0x02 ; 2
53a2: 40 e0 ldi r20, 0x00 ; 0
53a4: 50 e0 ldi r21, 0x00 ; 0
53a6: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
53aa: ca 01 movw r24, r20
53ac: b9 01 movw r22, r18
53ae: 20 91 83 01 lds r18, 0x0183
53b2: 33 27 eor r19, r19
53b4: 44 27 eor r20, r20
53b6: 55 27 eor r21, r21
53b8: 0e 94 e3 2d call 0x5bc6 ; 0x5bc6 <__mulsi3>
53bc: 20 e2 ldi r18, 0x20 ; 32
53be: 30 e0 ldi r19, 0x00 ; 0
53c0: 40 e0 ldi r20, 0x00 ; 0
53c2: 50 e0 ldi r21, 0x00 ; 0
53c4: 0e 94 4b 2e call 0x5c96 ; 0x5c96 <__divmodsi4>
53c8: ff ef ldi r31, 0xFF ; 255
53ca: 2e 3c cpi r18, 0xCE ; 206
53cc: 3f 07 cpc r19, r31
53ce: 14 f4 brge .+4 ; 0x53d4 <MotorRegler+0xf66>
53d0: 2e ec ldi r18, 0xCE ; 206
53d2: 3f ef ldi r19, 0xFF ; 255
53d4: 80 91 29 02 lds r24, 0x0229
53d8: 90 91 2a 02 lds r25, 0x022A
53dc: ac 01 movw r20, r24
53de: 64 e0 ldi r22, 0x04 ; 4
53e0: 44 0f add r20, r20
53e2: 55 1f adc r21, r21
53e4: 6a 95 dec r22
53e6: e1 f7 brne .-8 ; 0x53e0 <MotorRegler+0xf72>
53e8: 48 1b sub r20, r24
53ea: 59 0b sbc r21, r25
53ec: 23 33 cpi r18, 0x33 ; 51
53ee: 31 05 cpc r19, r1
53f0: 14 f0 brlt .+4 ; 0x53f6 <MotorRegler+0xf88>
53f2: 22 e3 ldi r18, 0x32 ; 50
53f4: 30 e0 ldi r19, 0x00 ; 0
53f6: 02 1b sub r16, r18
53f8: 13 0b sbc r17, r19
53fa: ca 01 movw r24, r20
53fc: 80 0f add r24, r16
53fe: 91 1f adc r25, r17
5400: 60 e1 ldi r22, 0x10 ; 16
5402: 70 e0 ldi r23, 0x00 ; 0
5404: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
5408: 70 93 2a 02 sts 0x022A, r23
540c: 60 93 29 02 sts 0x0229, r22
5410: 80 91 dd 04 lds r24, 0x04DD
5414: 99 27 eor r25, r25
5416: 68 17 cp r22, r24
5418: 79 07 cpc r23, r25
541a: 3c f4 brge .+14 ; 0x542a <MotorRegler+0xfbc>
541c: 48 16 cp r4, r24
541e: 59 06 cpc r5, r25
5420: 5c f0 brlt .+22 ; 0x5438 <MotorRegler+0xfca>
5422: 90 93 2a 02 sts 0x022A, r25
5426: 80 93 29 02 sts 0x0229, r24
542a: 80 91 29 02 lds r24, 0x0229
542e: 90 91 2a 02 lds r25, 0x022A
5432: 48 16 cp r4, r24
5434: 59 06 cpc r5, r25
5436: 24 f4 brge .+8 ; 0x5440 <MotorRegler+0xfd2>
5438: 50 92 2a 02 sts 0x022A, r5
543c: 40 92 29 02 sts 0x0229, r4
5440: 40 90 29 02 lds r4, 0x0229
5444: 50 90 2a 02 lds r5, 0x022A
5448: c0 90 24 05 lds r12, 0x0524
544c: d0 90 25 05 lds r13, 0x0525
5450: 80 91 3e 02 lds r24, 0x023E
5454: 90 91 3f 02 lds r25, 0x023F
5458: c8 1a sub r12, r24
545a: d9 0a sbc r13, r25
545c: 25 e6 ldi r18, 0x65 ; 101
545e: c2 16 cp r12, r18
5460: d1 04 cpc r13, r1
5462: 24 f0 brlt .+8 ; 0x546c <MotorRegler+0xffe>
5464: 14 e6 ldi r17, 0x64 ; 100
5466: c1 2e mov r12, r17
5468: d1 2c mov r13, r1
546a: 09 c0 rjmp .+18 ; 0x547e <MotorRegler+0x1010>
546c: 4c e9 ldi r20, 0x9C ; 156
546e: c4 16 cp r12, r20
5470: 4f ef ldi r20, 0xFF ; 255
5472: d4 06 cpc r13, r20
5474: 24 f4 brge .+8 ; 0x547e <MotorRegler+0x1010>
5476: bc e9 ldi r27, 0x9C ; 156
5478: cb 2e mov r12, r27
547a: bf ef ldi r27, 0xFF ; 255
547c: db 2e mov r13, r27
547e: 60 91 78 01 lds r22, 0x0178
5482: 70 91 79 01 lds r23, 0x0179
5486: 80 91 7a 01 lds r24, 0x017A
548a: 90 91 7b 01 lds r25, 0x017B
548e: 69 83 std Y+1, r22 ; 0x01
5490: 7a 83 std Y+2, r23 ; 0x02
5492: 8b 83 std Y+3, r24 ; 0x03
5494: 9c 83 std Y+4, r25 ; 0x04
5496: 20 91 19 02 lds r18, 0x0219
549a: 30 91 1a 02 lds r19, 0x021A
549e: 80 91 4a 02 lds r24, 0x024A
54a2: 90 91 4b 02 lds r25, 0x024B
54a6: 28 1b sub r18, r24
54a8: 39 0b sbc r19, r25
54aa: 60 91 10 05 lds r22, 0x0510
54ae: 70 91 11 05 lds r23, 0x0511
54b2: 62 1b sub r22, r18
54b4: 73 0b sbc r23, r19
54b6: 88 27 eor r24, r24
54b8: 77 fd sbrc r23, 7
54ba: 80 95 com r24
54bc: 98 2f mov r25, r24
54be: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
54c2: 9b 01 movw r18, r22
54c4: ac 01 movw r20, r24
54c6: 69 81 ldd r22, Y+1 ; 0x01
54c8: 7a 81 ldd r23, Y+2 ; 0x02
54ca: 8b 81 ldd r24, Y+3 ; 0x03
54cc: 9c 81 ldd r25, Y+4 ; 0x04
54ce: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
54d2: 0e 94 04 2d call 0x5a08 ; 0x5a08 <__fixsfsi>
54d6: fb 01 movw r30, r22
54d8: 70 93 63 02 sts 0x0263, r23
54dc: 60 93 62 02 sts 0x0262, r22
54e0: 8b 01 movw r16, r22
54e2: 22 27 eor r18, r18
54e4: 17 fd sbrc r17, 7
54e6: 20 95 com r18
54e8: 32 2f mov r19, r18
54ea: 80 91 46 02 lds r24, 0x0246
54ee: 90 91 47 02 lds r25, 0x0247
54f2: a0 91 48 02 lds r26, 0x0248
54f6: b0 91 49 02 lds r27, 0x0249
54fa: 08 0f add r16, r24
54fc: 19 1f adc r17, r25
54fe: 2a 1f adc r18, r26
5500: 3b 1f adc r19, r27
5502: 00 93 46 02 sts 0x0246, r16
5506: 10 93 47 02 sts 0x0247, r17
550a: 20 93 48 02 sts 0x0248, r18
550e: 30 93 49 02 sts 0x0249, r19
5512: 10 16 cp r1, r16
5514: 11 06 cpc r1, r17
5516: 12 06 cpc r1, r18
5518: 13 06 cpc r1, r19
551a: ac f4 brge .+42 ; 0x5546 <MotorRegler+0x10d8>
551c: c8 01 movw r24, r16
551e: 17 ff sbrs r17, 7
5520: 03 c0 rjmp .+6 ; 0x5528 <MotorRegler+0x10ba>
5522: 90 95 com r25
5524: 81 95 neg r24
5526: 9f 4f sbci r25, 0xFF ; 255
5528: 60 e0 ldi r22, 0x00 ; 0
552a: 71 e0 ldi r23, 0x01 ; 1
552c: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
5530: 6f 5f subi r22, 0xFF ; 255
5532: 7f 4f sbci r23, 0xFF ; 255
5534: 88 27 eor r24, r24
5536: 77 fd sbrc r23, 7
5538: 80 95 com r24
553a: 98 2f mov r25, r24
553c: 06 1b sub r16, r22
553e: 17 0b sbc r17, r23
5540: 28 0b sbc r18, r24
5542: 39 0b sbc r19, r25
5544: 14 c0 rjmp .+40 ; 0x556e <MotorRegler+0x1100>
5546: c8 01 movw r24, r16
5548: 17 ff sbrs r17, 7
554a: 03 c0 rjmp .+6 ; 0x5552 <MotorRegler+0x10e4>
554c: 90 95 com r25
554e: 81 95 neg r24
5550: 9f 4f sbci r25, 0xFF ; 255
5552: 60 e0 ldi r22, 0x00 ; 0
5554: 71 e0 ldi r23, 0x01 ; 1
5556: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
555a: 6f 5f subi r22, 0xFF ; 255
555c: 7f 4f sbci r23, 0xFF ; 255
555e: 88 27 eor r24, r24
5560: 77 fd sbrc r23, 7
5562: 80 95 com r24
5564: 98 2f mov r25, r24
5566: 06 0f add r16, r22
5568: 17 1f adc r17, r23
556a: 28 1f adc r18, r24
556c: 39 1f adc r19, r25
556e: 00 93 46 02 sts 0x0246, r16
5572: 10 93 47 02 sts 0x0247, r17
5576: 20 93 48 02 sts 0x0248, r18
557a: 30 93 49 02 sts 0x0249, r19
557e: 80 91 46 02 lds r24, 0x0246
5582: 90 91 47 02 lds r25, 0x0247
5586: a0 91 48 02 lds r26, 0x0248
558a: b0 91 49 02 lds r27, 0x0249
558e: 81 38 cpi r24, 0x81 ; 129
5590: 7e e3 ldi r23, 0x3E ; 62
5592: 97 07 cpc r25, r23
5594: 70 e0 ldi r23, 0x00 ; 0
5596: a7 07 cpc r26, r23
5598: 70 e0 ldi r23, 0x00 ; 0
559a: b7 07 cpc r27, r23
559c: 2c f0 brlt .+10 ; 0x55a8 <MotorRegler+0x113a>
559e: 80 e8 ldi r24, 0x80 ; 128
55a0: 9e e3 ldi r25, 0x3E ; 62
55a2: a0 e0 ldi r26, 0x00 ; 0
55a4: b0 e0 ldi r27, 0x00 ; 0
55a6: 09 c0 rjmp .+18 ; 0x55ba <MotorRegler+0x114c>
55a8: 80 58 subi r24, 0x80 ; 128
55aa: 91 4c sbci r25, 0xC1 ; 193
55ac: af 4f sbci r26, 0xFF ; 255
55ae: bf 4f sbci r27, 0xFF ; 255
55b0: 64 f4 brge .+24 ; 0x55ca <MotorRegler+0x115c>
55b2: 80 e8 ldi r24, 0x80 ; 128
55b4: 91 ec ldi r25, 0xC1 ; 193
55b6: af ef ldi r26, 0xFF ; 255
55b8: bf ef ldi r27, 0xFF ; 255
55ba: 80 93 46 02 sts 0x0246, r24
55be: 90 93 47 02 sts 0x0247, r25
55c2: a0 93 48 02 sts 0x0248, r26
55c6: b0 93 49 02 sts 0x0249, r27
55ca: 80 90 7c 01 lds r8, 0x017C
55ce: 90 90 7d 01 lds r9, 0x017D
55d2: a0 90 7e 01 lds r10, 0x017E
55d6: b0 90 7f 01 lds r11, 0x017F
55da: bf 01 movw r22, r30
55dc: 88 27 eor r24, r24
55de: 77 fd sbrc r23, 7
55e0: 80 95 com r24
55e2: 98 2f mov r25, r24
55e4: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
55e8: 7b 01 movw r14, r22
55ea: 8c 01 movw r16, r24
55ec: 60 91 46 02 lds r22, 0x0246
55f0: 70 91 47 02 lds r23, 0x0247
55f4: 80 91 48 02 lds r24, 0x0248
55f8: 90 91 49 02 lds r25, 0x0249
55fc: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
5600: 9b 01 movw r18, r22
5602: ac 01 movw r20, r24
5604: c5 01 movw r24, r10
5606: b4 01 movw r22, r8
5608: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
560c: 9b 01 movw r18, r22
560e: ac 01 movw r20, r24
5610: c8 01 movw r24, r16
5612: b7 01 movw r22, r14
5614: 0e 94 7c 2c call 0x58f8 ; 0x58f8 <__addsf3>
5618: 0e 94 04 2d call 0x5a08 ; 0x5a08 <__fixsfsi>
561c: 96 01 movw r18, r12
561e: 26 0f add r18, r22
5620: 37 1f adc r19, r23
5622: 24 0d add r18, r4
5624: 35 1d adc r19, r5
5626: 66 24 eor r6, r6
5628: 4a e0 ldi r20, 0x0A ; 10
562a: 44 16 cp r4, r20
562c: 51 04 cpc r5, r1
562e: 14 f4 brge .+4 ; 0x5634 <MotorRegler+0x11c6>
5630: a1 e0 ldi r26, 0x01 ; 1
5632: 6a 2e mov r6, r26
5634: 37 fd sbrc r19, 7
5636: 02 c0 rjmp .+4 ; 0x563c <MotorRegler+0x11ce>
5638: 66 20 and r6, r6
563a: 19 f0 breq .+6 ; 0x5642 <MotorRegler+0x11d4>
563c: 40 e0 ldi r20, 0x00 ; 0
563e: 50 e0 ldi r21, 0x00 ; 0
5640: 08 c0 rjmp .+16 ; 0x5652 <MotorRegler+0x11e4>
5642: 80 91 23 05 lds r24, 0x0523
5646: 48 2f mov r20, r24
5648: 55 27 eor r21, r21
564a: 24 17 cp r18, r20
564c: 35 07 cpc r19, r21
564e: 0c f4 brge .+2 ; 0x5652 <MotorRegler+0x11e4>
5650: a9 01 movw r20, r18
5652: 80 91 12 05 lds r24, 0x0512
5656: 28 2e mov r2, r24
5658: 33 24 eor r3, r3
565a: 91 01 movw r18, r2
565c: 24 16 cp r2, r20
565e: 35 06 cpc r3, r21
5660: 0c f4 brge .+2 ; 0x5664 <MotorRegler+0x11f6>
5662: 9a 01 movw r18, r20
5664: 20 93 60 02 sts 0x0260, r18
5668: c2 01 movw r24, r4
566a: 86 1b sub r24, r22
566c: 97 0b sbc r25, r23
566e: bc 01 movw r22, r24
5670: 6c 0d add r22, r12
5672: 7d 1d adc r23, r13
5674: 77 fd sbrc r23, 7
5676: 02 c0 rjmp .+4 ; 0x567c <MotorRegler+0x120e>
5678: 66 20 and r6, r6
567a: 19 f0 breq .+6 ; 0x5682 <MotorRegler+0x1214>
567c: 80 e0 ldi r24, 0x00 ; 0
567e: 90 e0 ldi r25, 0x00 ; 0
5680: 07 c0 rjmp .+14 ; 0x5690 <MotorRegler+0x1222>
5682: 80 91 23 05 lds r24, 0x0523
5686: 99 27 eor r25, r25
5688: 68 17 cp r22, r24
568a: 79 07 cpc r23, r25
568c: 0c f4 brge .+2 ; 0x5690 <MotorRegler+0x1222>
568e: cb 01 movw r24, r22
5690: 91 01 movw r18, r2
5692: 28 16 cp r2, r24
5694: 39 06 cpc r3, r25
5696: 0c f4 brge .+2 ; 0x569a <MotorRegler+0x122c>
5698: 9c 01 movw r18, r24
569a: 20 93 61 02 sts 0x0261, r18
569e: 20 91 1b 02 lds r18, 0x021B
56a2: 30 91 1c 02 lds r19, 0x021C
56a6: 80 91 4c 02 lds r24, 0x024C
56aa: 90 91 4d 02 lds r25, 0x024D
56ae: 28 1b sub r18, r24
56b0: 39 0b sbc r19, r25
56b2: 60 91 0e 05 lds r22, 0x050E
56b6: 70 91 0f 05 lds r23, 0x050F
56ba: 62 1b sub r22, r18
56bc: 73 0b sbc r23, r19
56be: 88 27 eor r24, r24
56c0: 77 fd sbrc r23, 7
56c2: 80 95 com r24
56c4: 98 2f mov r25, r24
56c6: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
56ca: 9b 01 movw r18, r22
56cc: ac 01 movw r20, r24
56ce: 69 81 ldd r22, Y+1 ; 0x01
56d0: 7a 81 ldd r23, Y+2 ; 0x02
56d2: 8b 81 ldd r24, Y+3 ; 0x03
56d4: 9c 81 ldd r25, Y+4 ; 0x04
56d6: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
56da: 0e 94 04 2d call 0x5a08 ; 0x5a08 <__fixsfsi>
56de: fb 01 movw r30, r22
56e0: 70 93 5f 02 sts 0x025F, r23
56e4: 60 93 5e 02 sts 0x025E, r22
56e8: 8b 01 movw r16, r22
56ea: 22 27 eor r18, r18
56ec: 17 fd sbrc r17, 7
56ee: 20 95 com r18
56f0: 32 2f mov r19, r18
56f2: 80 91 42 02 lds r24, 0x0242
56f6: 90 91 43 02 lds r25, 0x0243
56fa: a0 91 44 02 lds r26, 0x0244
56fe: b0 91 45 02 lds r27, 0x0245
5702: 08 0f add r16, r24
5704: 19 1f adc r17, r25
5706: 2a 1f adc r18, r26
5708: 3b 1f adc r19, r27
570a: 00 93 42 02 sts 0x0242, r16
570e: 10 93 43 02 sts 0x0243, r17
5712: 20 93 44 02 sts 0x0244, r18
5716: 30 93 45 02 sts 0x0245, r19
571a: 10 16 cp r1, r16
571c: 11 06 cpc r1, r17
571e: 12 06 cpc r1, r18
5720: 13 06 cpc r1, r19
5722: ac f4 brge .+42 ; 0x574e <MotorRegler+0x12e0>
5724: c8 01 movw r24, r16
5726: 17 ff sbrs r17, 7
5728: 03 c0 rjmp .+6 ; 0x5730 <MotorRegler+0x12c2>
572a: 90 95 com r25
572c: 81 95 neg r24
572e: 9f 4f sbci r25, 0xFF ; 255
5730: 60 e0 ldi r22, 0x00 ; 0
5732: 71 e0 ldi r23, 0x01 ; 1
5734: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
5738: 6f 5f subi r22, 0xFF ; 255
573a: 7f 4f sbci r23, 0xFF ; 255
573c: 88 27 eor r24, r24
573e: 77 fd sbrc r23, 7
5740: 80 95 com r24
5742: 98 2f mov r25, r24
5744: 06 1b sub r16, r22
5746: 17 0b sbc r17, r23
5748: 28 0b sbc r18, r24
574a: 39 0b sbc r19, r25
574c: 14 c0 rjmp .+40 ; 0x5776 <MotorRegler+0x1308>
574e: c8 01 movw r24, r16
5750: 17 ff sbrs r17, 7
5752: 03 c0 rjmp .+6 ; 0x575a <MotorRegler+0x12ec>
5754: 90 95 com r25
5756: 81 95 neg r24
5758: 9f 4f sbci r25, 0xFF ; 255
575a: 60 e0 ldi r22, 0x00 ; 0
575c: 71 e0 ldi r23, 0x01 ; 1
575e: 0e 94 16 2e call 0x5c2c ; 0x5c2c <__divmodhi4>
5762: 6f 5f subi r22, 0xFF ; 255
5764: 7f 4f sbci r23, 0xFF ; 255
5766: 88 27 eor r24, r24
5768: 77 fd sbrc r23, 7
576a: 80 95 com r24
576c: 98 2f mov r25, r24
576e: 06 0f add r16, r22
5770: 17 1f adc r17, r23
5772: 28 1f adc r18, r24
5774: 39 1f adc r19, r25
5776: 00 93 42 02 sts 0x0242, r16
577a: 10 93 43 02 sts 0x0243, r17
577e: 20 93 44 02 sts 0x0244, r18
5782: 30 93 45 02 sts 0x0245, r19
5786: 80 91 42 02 lds r24, 0x0242
578a: 90 91 43 02 lds r25, 0x0243
578e: a0 91 44 02 lds r26, 0x0244
5792: b0 91 45 02 lds r27, 0x0245
5796: 81 38 cpi r24, 0x81 ; 129
5798: 2e e3 ldi r18, 0x3E ; 62
579a: 92 07 cpc r25, r18
579c: 20 e0 ldi r18, 0x00 ; 0
579e: a2 07 cpc r26, r18
57a0: 20 e0 ldi r18, 0x00 ; 0
57a2: b2 07 cpc r27, r18
57a4: 2c f0 brlt .+10 ; 0x57b0 <MotorRegler+0x1342>
57a6: 80 e8 ldi r24, 0x80 ; 128
57a8: 9e e3 ldi r25, 0x3E ; 62
57aa: a0 e0 ldi r26, 0x00 ; 0
57ac: b0 e0 ldi r27, 0x00 ; 0
57ae: 09 c0 rjmp .+18 ; 0x57c2 <MotorRegler+0x1354>
57b0: 80 58 subi r24, 0x80 ; 128
57b2: 91 4c sbci r25, 0xC1 ; 193
57b4: af 4f sbci r26, 0xFF ; 255
57b6: bf 4f sbci r27, 0xFF ; 255
57b8: 64 f4 brge .+24 ; 0x57d2 <MotorRegler+0x1364>
57ba: 80 e8 ldi r24, 0x80 ; 128
57bc: 91 ec ldi r25, 0xC1 ; 193
57be: af ef ldi r26, 0xFF ; 255
57c0: bf ef ldi r27, 0xFF ; 255
57c2: 80 93 42 02 sts 0x0242, r24
57c6: 90 93 43 02 sts 0x0243, r25
57ca: a0 93 44 02 sts 0x0244, r26
57ce: b0 93 45 02 sts 0x0245, r27
57d2: bf 01 movw r22, r30
57d4: 88 27 eor r24, r24
57d6: 77 fd sbrc r23, 7
57d8: 80 95 com r24
57da: 98 2f mov r25, r24
57dc: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
57e0: 7b 01 movw r14, r22
57e2: 8c 01 movw r16, r24
57e4: 60 91 42 02 lds r22, 0x0242
57e8: 70 91 43 02 lds r23, 0x0243
57ec: 80 91 44 02 lds r24, 0x0244
57f0: 90 91 45 02 lds r25, 0x0245
57f4: 0e 94 21 2d call 0x5a42 ; 0x5a42 <__floatsisf>
57f8: 9b 01 movw r18, r22
57fa: ac 01 movw r20, r24
57fc: c5 01 movw r24, r10
57fe: b4 01 movw r22, r8
5800: 0e 94 9b 2d call 0x5b36 ; 0x5b36 <__mulsf3>
5804: 9b 01 movw r18, r22
5806: ac 01 movw r20, r24
5808: c8 01 movw r24, r16
580a: b7 01 movw r22, r14
580c: 0e 94 7c 2c call 0x58f8 ; 0x58f8 <__addsf3>
5810: 0e 94 04 2d call 0x5a08 ; 0x5a08 <__fixsfsi>
5814: 92 01 movw r18, r4
5816: 26 0f add r18, r22
5818: 37 1f adc r19, r23
581a: 2c 19 sub r18, r12
581c: 3d 09 sbc r19, r13
581e: 37 fd sbrc r19, 7
5820: 02 c0 rjmp .+4 ; 0x5826 <MotorRegler+0x13b8>
5822: 66 20 and r6, r6
5824: 19 f0 breq .+6 ; 0x582c <MotorRegler+0x13be>
5826: 40 e0 ldi r20, 0x00 ; 0
5828: 50 e0 ldi r21, 0x00 ; 0
582a: 08 c0 rjmp .+16 ; 0x583c <MotorRegler+0x13ce>
582c: 80 91 23 05 lds r24, 0x0523
5830: 48 2f mov r20, r24
5832: 55 27 eor r21, r21
5834: 24 17 cp r18, r20
5836: 35 07 cpc r19, r21
5838: 0c f4 brge .+2 ; 0x583c <MotorRegler+0x13ce>
583a: a9 01 movw r20, r18
583c: 91 01 movw r18, r2
583e: 24 16 cp r2, r20
5840: 35 06 cpc r3, r21
5842: 0c f4 brge .+2 ; 0x5846 <MotorRegler+0x13d8>
5844: 9a 01 movw r18, r20
5846: 20 93 65 02 sts 0x0265, r18
584a: 46 1a sub r4, r22
584c: 57 0a sbc r5, r23
584e: b2 01 movw r22, r4
5850: 6c 19 sub r22, r12
5852: 7d 09 sbc r23, r13
5854: 77 fd sbrc r23, 7
5856: 02 c0 rjmp .+4 ; 0x585c <MotorRegler+0x13ee>
5858: 66 20 and r6, r6
585a: 19 f0 breq .+6 ; 0x5862 <MotorRegler+0x13f4>
585c: 20 e0 ldi r18, 0x00 ; 0
585e: 30 e0 ldi r19, 0x00 ; 0
5860: 08 c0 rjmp .+16 ; 0x5872 <MotorRegler+0x1404>
5862: 80 91 23 05 lds r24, 0x0523
5866: 28 2f mov r18, r24
5868: 33 27 eor r19, r19
586a: 62 17 cp r22, r18
586c: 73 07 cpc r23, r19
586e: 0c f4 brge .+2 ; 0x5872 <MotorRegler+0x1404>
5870: 9b 01 movw r18, r22
5872: c1 01 movw r24, r2
5874: 22 16 cp r2, r18
5876: 33 06 cpc r3, r19
5878: 0c f4 brge .+2 ; 0x587c <MotorRegler+0x140e>
587a: c9 01 movw r24, r18
587c: 80 93 64 02 sts 0x0264, r24
5880: e2 e1 ldi r30, 0x12 ; 18
5882: ca 5f subi r28, 0xFA ; 250
5884: 0c 94 82 2e jmp 0x5d04 ; 0x5d04 <__epilogue_restores__>
 
00005888 <GPS_Neutral>:
5888: 80 91 4e 02 lds r24, 0x024E
588c: 90 91 4f 02 lds r25, 0x024F
5890: a0 91 50 02 lds r26, 0x0250
5894: b0 91 51 02 lds r27, 0x0251
5898: 80 93 56 02 sts 0x0256, r24
589c: 90 93 57 02 sts 0x0257, r25
58a0: a0 93 58 02 sts 0x0258, r26
58a4: b0 93 59 02 sts 0x0259, r27
58a8: 80 91 52 02 lds r24, 0x0252
58ac: 90 91 53 02 lds r25, 0x0253
58b0: a0 91 54 02 lds r26, 0x0254
58b4: b0 91 55 02 lds r27, 0x0255
58b8: 80 93 5a 02 sts 0x025A, r24
58bc: 90 93 5b 02 sts 0x025B, r25
58c0: a0 93 5c 02 sts 0x025C, r26
58c4: b0 93 5d 02 sts 0x025D, r27
58c8: 08 95 ret
 
000058ca <GPS_BerechneZielrichtung>:
58ca: 10 92 4b 02 sts 0x024B, r1
58ce: 10 92 4a 02 sts 0x024A, r1
58d2: 10 92 4d 02 sts 0x024D, r1
58d6: 10 92 4c 02 sts 0x024C, r1
58da: 08 95 ret
 
000058dc <memchr>:
58dc: fc 01 movw r30, r24
58de: 41 50 subi r20, 0x01 ; 1
58e0: 50 40 sbci r21, 0x00 ; 0
58e2: 30 f0 brcs .+12 ; 0x58f0 <memchr+0x14>
58e4: 01 90 ld r0, Z+
58e6: 06 16 cp r0, r22
58e8: d1 f7 brne .-12 ; 0x58de <memchr+0x2>
58ea: 31 97 sbiw r30, 0x01 ; 1
58ec: cf 01 movw r24, r30
58ee: 08 95 ret
58f0: 88 27 eor r24, r24
58f2: 99 27 eor r25, r25
58f4: 08 95 ret
 
000058f6 <__subsf3>:
58f6: 50 58 subi r21, 0x80 ; 128
 
000058f8 <__addsf3>:
58f8: 19 2e mov r1, r25
58fa: ef d0 rcall .+478 ; 0x5ada <__fp_split3>
58fc: 01 d0 rcall .+2 ; 0x5900 <__addsf3x>
58fe: d2 c0 rjmp .+420 ; 0x5aa4 <__fp_merge>
 
00005900 <__addsf3x>:
5900: ba 17 cp r27, r26
5902: 62 07 cpc r22, r18
5904: 73 07 cpc r23, r19
5906: 84 07 cpc r24, r20
5908: 95 07 cpc r25, r21
590a: b1 f1 breq .+108 ; 0x5978 <__addsf3x+0x78>
590c: 88 f4 brcc .+34 ; 0x5930 <__addsf3x+0x30>
590e: 0e f4 brtc .+2 ; 0x5912 <__addsf3x+0x12>
5910: 10 94 com r1
5912: 0b 2e mov r0, r27
5914: ba 2f mov r27, r26
5916: a0 2d mov r26, r0
5918: 06 2e mov r0, r22
591a: 62 2f mov r22, r18
591c: 20 2d mov r18, r0
591e: 07 2e mov r0, r23
5920: 73 2f mov r23, r19
5922: 30 2d mov r19, r0
5924: 08 2e mov r0, r24
5926: 84 2f mov r24, r20
5928: 40 2d mov r20, r0
592a: 09 2e mov r0, r25
592c: 95 2f mov r25, r21
592e: 50 2d mov r21, r0
5930: ff 27 eor r31, r31
5932: 55 23 and r21, r21
5934: b9 f0 breq .+46 ; 0x5964 <__addsf3x+0x64>
5936: 59 1b sub r21, r25
5938: 49 f0 breq .+18 ; 0x594c <__addsf3x+0x4c>
593a: 57 3e cpi r21, 0xE7 ; 231
593c: 98 f0 brcs .+38 ; 0x5964 <__addsf3x+0x64>
593e: 46 95 lsr r20
5940: 37 95 ror r19
5942: 27 95 ror r18
5944: a7 95 ror r26
5946: f0 40 sbci r31, 0x00 ; 0
5948: 53 95 inc r21
594a: c9 f7 brne .-14 ; 0x593e <__addsf3x+0x3e>
594c: 76 f0 brts .+28 ; 0x596a <__addsf3x+0x6a>
594e: ba 0f add r27, r26
5950: 62 1f adc r22, r18
5952: 73 1f adc r23, r19
5954: 84 1f adc r24, r20
5956: 30 f4 brcc .+12 ; 0x5964 <__addsf3x+0x64>
5958: 87 95 ror r24
595a: 77 95 ror r23
595c: 67 95 ror r22
595e: b7 95 ror r27
5960: f0 40 sbci r31, 0x00 ; 0
5962: 93 95 inc r25
5964: 17 fa bst r1, 7
5966: 0f 2e mov r0, r31
5968: 08 95 ret
596a: bf 1b sub r27, r31
596c: bb 27 eor r27, r27
596e: ba 0b sbc r27, r26
5970: 62 0b sbc r22, r18
5972: 73 0b sbc r23, r19
5974: 84 0b sbc r24, r20
5976: f6 cf rjmp .-20 ; 0x5964 <__addsf3x+0x64>
5978: de f6 brtc .-74 ; 0x5930 <__addsf3x+0x30>
597a: db c0 rjmp .+438 ; 0x5b32 <__fp_zerox>
 
0000597c <__divsf3>:
597c: ae d0 rcall .+348 ; 0x5ada <__fp_split3>
597e: 01 d0 rcall .+2 ; 0x5982 <__divsf3x>
5980: 91 c0 rjmp .+290 ; 0x5aa4 <__fp_merge>
 
00005982 <__divsf3x>:
5982: 55 23 and r21, r21
5984: 59 f0 breq .+22 ; 0x599c <__divsf3x+0x1a>
5986: 99 23 and r25, r25
5988: 69 f0 breq .+26 ; 0x59a4 <__divsf3x+0x22>
598a: 9f 57 subi r25, 0x7F ; 127
598c: 5f 57 subi r21, 0x7F ; 127
598e: 95 1b sub r25, r21
5990: 33 f4 brvc .+12 ; 0x599e <__divsf3x+0x1c>
5992: 42 f4 brpl .+16 ; 0x59a4 <__divsf3x+0x22>
5994: 90 38 cpi r25, 0x80 ; 128
5996: 11 f4 brne .+4 ; 0x599c <__divsf3x+0x1a>
5998: 91 58 subi r25, 0x81 ; 129
599a: 05 c0 rjmp .+10 ; 0x59a6 <__divsf3x+0x24>
599c: 9b c0 rjmp .+310 ; 0x5ad4 <__fp_nan>
599e: 91 58 subi r25, 0x81 ; 129
59a0: 9f 3f cpi r25, 0xFF ; 255
59a2: 09 f4 brne .+2 ; 0x59a6 <__divsf3x+0x24>
59a4: c6 c0 rjmp .+396 ; 0x5b32 <__fp_zerox>
59a6: bb 27 eor r27, r27
59a8: 11 24 eor r1, r1
59aa: 62 17 cp r22, r18
59ac: 73 07 cpc r23, r19
59ae: 84 07 cpc r24, r20
59b0: 30 f4 brcc .+12 ; 0x59be <__divsf3x+0x3c>
59b2: 66 0f add r22, r22
59b4: 77 1f adc r23, r23
59b6: 88 1f adc r24, r24
59b8: bb 1f adc r27, r27
59ba: 91 50 subi r25, 0x01 ; 1
59bc: 98 f3 brcs .-26 ; 0x59a4 <__divsf3x+0x22>
59be: 11 d0 rcall .+34 ; 0x59e2 <__divsf3x+0x60>
59c0: 0f 92 push r0
59c2: 0f d0 rcall .+30 ; 0x59e2 <__divsf3x+0x60>
59c4: 0f 92 push r0
59c6: 0d d0 rcall .+26 ; 0x59e2 <__divsf3x+0x60>
59c8: a0 e8 ldi r26, 0x80 ; 128
59ca: 26 17 cp r18, r22
59cc: 37 07 cpc r19, r23
59ce: 48 07 cpc r20, r24
59d0: 1b 06 cpc r1, r27
59d2: 09 f0 breq .+2 ; 0x59d6 <__divsf3x+0x54>
59d4: a0 48 sbci r26, 0x80 ; 128
59d6: ba 2f mov r27, r26
59d8: 60 2d mov r22, r0
59da: 7f 91 pop r23
59dc: 8f 91 pop r24
59de: 00 24 eor r0, r0
59e0: 08 95 ret
59e2: a0 e8 ldi r26, 0x80 ; 128
59e4: 00 24 eor r0, r0
59e6: 62 17 cp r22, r18
59e8: 73 07 cpc r23, r19
59ea: 84 07 cpc r24, r20
59ec: b1 05 cpc r27, r1
59ee: 28 f0 brcs .+10 ; 0x59fa <__divsf3x+0x78>
59f0: 62 1b sub r22, r18
59f2: 73 0b sbc r23, r19
59f4: 84 0b sbc r24, r20
59f6: b1 09 sbc r27, r1
59f8: 0a 2a or r0, r26
59fa: 66 0f add r22, r22
59fc: 77 1f adc r23, r23
59fe: 88 1f adc r24, r24
5a00: bb 1f adc r27, r27
5a02: a6 95 lsr r26
5a04: 81 f7 brne .-32 ; 0x59e6 <__divsf3x+0x64>
5a06: 08 95 ret
 
00005a08 <__fixsfsi>:
5a08: 97 fb bst r25, 7
5a0a: 73 d0 rcall .+230 ; 0x5af2 <__fp_split1>
5a0c: 9f 37 cpi r25, 0x7F ; 127
5a0e: 38 f0 brcs .+14 ; 0x5a1e <__fixsfsi+0x16>
5a10: fe e9 ldi r31, 0x9E ; 158
5a12: f9 1b sub r31, r25
5a14: 98 2f mov r25, r24
5a16: 87 2f mov r24, r23
5a18: 76 2f mov r23, r22
5a1a: 6b 2f mov r22, r27
5a1c: 05 c0 rjmp .+10 ; 0x5a28 <__fixsfsi+0x20>
5a1e: 86 c0 rjmp .+268 ; 0x5b2c <__fp_zero>
5a20: 96 95 lsr r25
5a22: 87 95 ror r24
5a24: 77 95 ror r23
5a26: 67 95 ror r22
5a28: f1 50 subi r31, 0x01 ; 1
5a2a: d0 f7 brcc .-12 ; 0x5a20 <__fixsfsi+0x18>
5a2c: 3e f4 brtc .+14 ; 0x5a3c <__fp_lneg+0xe>
 
00005a2e <__fp_lneg>:
5a2e: 90 95 com r25
5a30: 80 95 com r24
5a32: 70 95 com r23
5a34: 61 95 neg r22
5a36: 7f 4f sbci r23, 0xFF ; 255
5a38: 8f 4f sbci r24, 0xFF ; 255
5a3a: 9f 4f sbci r25, 0xFF ; 255
5a3c: 08 95 ret
 
00005a3e <__floatunssisf>:
5a3e: e8 94 clt
5a40: 03 c0 rjmp .+6 ; 0x5a48 <__floatsisf+0x6>
 
00005a42 <__floatsisf>:
5a42: 97 fb bst r25, 7
5a44: 0e f4 brtc .+2 ; 0x5a48 <__floatsisf+0x6>
5a46: f3 df rcall .-26 ; 0x5a2e <__fp_lneg>
5a48: b6 2f mov r27, r22
5a4a: 67 2f mov r22, r23
5a4c: 78 2f mov r23, r24
5a4e: 89 2f mov r24, r25
5a50: 9e e9 ldi r25, 0x9E ; 158
5a52: 00 24 eor r0, r0
5a54: 27 c0 rjmp .+78 ; 0x5aa4 <__fp_merge>
 
00005a56 <__eqsf2>:
5a56: 0e d0 rcall .+28 ; 0x5a74 <.fp_cmp>
5a58: 5e f0 brts .+22 ; 0x5a70 <__cmpsf2+0xe>
5a5a: 04 c0 rjmp .+8 ; 0x5a64 <__cmpsf2+0x2>
 
00005a5c <__gesf2>:
5a5c: 0b d0 rcall .+22 ; 0x5a74 <.fp_cmp>
5a5e: 26 f0 brts .+8 ; 0x5a68 <__cmpsf2+0x6>
5a60: 01 c0 rjmp .+2 ; 0x5a64 <__cmpsf2+0x2>
 
00005a62 <__cmpsf2>:
5a62: 08 d0 rcall .+16 ; 0x5a74 <.fp_cmp>
5a64: 19 f0 breq .+6 ; 0x5a6c <__cmpsf2+0xa>
5a66: 20 f4 brcc .+8 ; 0x5a70 <__cmpsf2+0xe>
5a68: 8f ef ldi r24, 0xFF ; 255
5a6a: 08 95 ret
5a6c: 80 e0 ldi r24, 0x00 ; 0
5a6e: 08 95 ret
5a70: 81 e0 ldi r24, 0x01 ; 1
5a72: 08 95 ret
 
00005a74 <.fp_cmp>:
5a74: 97 fb bst r25, 7
5a76: 09 2e mov r0, r25
5a78: 05 26 eor r0, r21
5a7a: 00 f8 bld r0, 0
5a7c: 68 94 set
5a7e: 30 d0 rcall .+96 ; 0x5ae0 <__fp_split2>
5a80: e8 94 clt
5a82: 07 fc sbrc r0, 7
5a84: 07 c0 rjmp .+14 ; 0x5a94 <.fp_cmp+0x20>
5a86: 62 17 cp r22, r18
5a88: 73 07 cpc r23, r19
5a8a: 84 07 cpc r24, r20
5a8c: 95 07 cpc r25, r21
5a8e: 21 f0 breq .+8 ; 0x5a98 <.fp_cmp+0x24>
5a90: 08 f4 brcc .+2 ; 0x5a94 <.fp_cmp+0x20>
5a92: 00 94 com r0
5a94: 07 94 ror r0
5a96: 98 94 clz
5a98: 08 95 ret
5a9a: 9a 95 dec r25
5a9c: bb 0f add r27, r27
5a9e: 66 1f adc r22, r22
5aa0: 77 1f adc r23, r23
5aa2: 88 1f adc r24, r24
 
00005aa4 <__fp_merge>:
5aa4: 11 24 eor r1, r1
5aa6: 99 23 and r25, r25
5aa8: a1 f0 breq .+40 ; 0x5ad2 <__fp_merge+0x2e>
5aaa: 88 23 and r24, r24
5aac: b2 f7 brpl .-20 ; 0x5a9a <.fp_cmp+0x26>
5aae: 9f 3f cpi r25, 0xFF ; 255
5ab0: 59 f0 breq .+22 ; 0x5ac8 <__fp_merge+0x24>
5ab2: bb 0f add r27, r27
5ab4: 48 f4 brcc .+18 ; 0x5ac8 <__fp_merge+0x24>
5ab6: 21 f4 brne .+8 ; 0x5ac0 <__fp_merge+0x1c>
5ab8: 00 20 and r0, r0
5aba: 11 f4 brne .+4 ; 0x5ac0 <__fp_merge+0x1c>
5abc: 60 ff sbrs r22, 0
5abe: 04 c0 rjmp .+8 ; 0x5ac8 <__fp_merge+0x24>
5ac0: 6f 5f subi r22, 0xFF ; 255
5ac2: 7f 4f sbci r23, 0xFF ; 255
5ac4: 8f 4f sbci r24, 0xFF ; 255
5ac6: 9f 4f sbci r25, 0xFF ; 255
5ac8: 88 1f adc r24, r24
5aca: 97 95 ror r25
5acc: 87 95 ror r24
5ace: 97 f9 bld r25, 7
5ad0: 08 95 ret
5ad2: 2c c0 rjmp .+88 ; 0x5b2c <__fp_zero>
 
00005ad4 <__fp_nan>:
5ad4: 9f ef ldi r25, 0xFF ; 255
5ad6: 80 ec ldi r24, 0xC0 ; 192
5ad8: 08 95 ret
 
00005ada <__fp_split3>:
5ada: 05 2e mov r0, r21
5adc: 09 26 eor r0, r25
5ade: 07 fa bst r0, 7
 
00005ae0 <__fp_split2>:
5ae0: 44 0f add r20, r20
5ae2: 55 1f adc r21, r21
5ae4: 5f 3f cpi r21, 0xFF ; 255
5ae6: 79 f0 breq .+30 ; 0x5b06 <__fp_split1+0x14>
5ae8: aa 27 eor r26, r26
5aea: a5 17 cp r26, r21
5aec: 08 f0 brcs .+2 ; 0x5af0 <__fp_split2+0x10>
5aee: 51 e0 ldi r21, 0x01 ; 1
5af0: 47 95 ror r20
 
00005af2 <__fp_split1>:
5af2: 88 0f add r24, r24
5af4: 99 1f adc r25, r25
5af6: 9f 3f cpi r25, 0xFF ; 255
5af8: 31 f0 breq .+12 ; 0x5b06 <__fp_split1+0x14>
5afa: bb 27 eor r27, r27
5afc: b9 17 cp r27, r25
5afe: 08 f0 brcs .+2 ; 0x5b02 <__fp_split1+0x10>
5b00: 91 e0 ldi r25, 0x01 ; 1
5b02: 87 95 ror r24
5b04: 08 95 ret
5b06: 9f 91 pop r25
5b08: 9f 91 pop r25
5b0a: 11 24 eor r1, r1
5b0c: e3 cf rjmp .-58 ; 0x5ad4 <__fp_nan>
 
00005b0e <__fp_split_a>:
5b0e: 97 fb bst r25, 7
5b10: 88 0f add r24, r24
5b12: 99 1f adc r25, r25
5b14: 9f 3f cpi r25, 0xFF ; 255
5b16: 31 f0 breq .+12 ; 0x5b24 <__fp_split_a+0x16>
5b18: bb 27 eor r27, r27
5b1a: b9 17 cp r27, r25
5b1c: 08 f0 brcs .+2 ; 0x5b20 <__fp_split_a+0x12>
5b1e: 91 e0 ldi r25, 0x01 ; 1
5b20: 87 95 ror r24
5b22: 08 95 ret
5b24: 9f 91 pop r25
5b26: 9f 91 pop r25
5b28: 11 24 eor r1, r1
5b2a: d4 cf rjmp .-88 ; 0x5ad4 <__fp_nan>
 
00005b2c <__fp_zero>:
5b2c: 66 27 eor r22, r22
5b2e: 77 27 eor r23, r23
5b30: 88 27 eor r24, r24
 
00005b32 <__fp_zerox>:
5b32: 99 27 eor r25, r25
5b34: 08 95 ret
 
00005b36 <__mulsf3>:
5b36: d1 df rcall .-94 ; 0x5ada <__fp_split3>
5b38: 01 d0 rcall .+2 ; 0x5b3c <__mulsf3x>
5b3a: b4 cf rjmp .-152 ; 0x5aa4 <__fp_merge>
 
00005b3c <__mulsf3x>:
5b3c: 99 23 and r25, r25
5b3e: 39 f0 breq .+14 ; 0x5b4e <__mulsf3x+0x12>
5b40: 55 23 and r21, r21
5b42: 29 f0 breq .+10 ; 0x5b4e <__mulsf3x+0x12>
5b44: 9f 57 subi r25, 0x7F ; 127
5b46: 5f 57 subi r21, 0x7F ; 127
5b48: 95 0f add r25, r21
5b4a: 13 f4 brvc .+4 ; 0x5b50 <__mulsf3x+0x14>
5b4c: 9a f1 brmi .+102 ; 0x5bb4 <__mulsf3x+0x78>
5b4e: f1 cf rjmp .-30 ; 0x5b32 <__fp_zerox>
5b50: 91 58 subi r25, 0x81 ; 129
5b52: 9f 3f cpi r25, 0xFF ; 255
5b54: e1 f3 breq .-8 ; 0x5b4e <__mulsf3x+0x12>
5b56: 62 9f mul r22, r18
5b58: a1 2d mov r26, r1
5b5a: 0f 92 push r0
5b5c: bb 27 eor r27, r27
5b5e: 63 9f mul r22, r19
5b60: a0 0d add r26, r0
5b62: b1 1d adc r27, r1
5b64: ee 27 eor r30, r30
5b66: 72 9f mul r23, r18
5b68: a0 0d add r26, r0
5b6a: b1 1d adc r27, r1
5b6c: ee 1f adc r30, r30
5b6e: af 93 push r26
5b70: aa 27 eor r26, r26
5b72: 64 9f mul r22, r20
5b74: b0 0d add r27, r0
5b76: e1 1d adc r30, r1
5b78: 73 9f mul r23, r19
5b7a: b0 0d add r27, r0
5b7c: e1 1d adc r30, r1
5b7e: aa 1f adc r26, r26
5b80: 66 27 eor r22, r22
5b82: 82 9f mul r24, r18
5b84: b0 0d add r27, r0
5b86: e1 1d adc r30, r1
5b88: a6 1f adc r26, r22
5b8a: 55 27 eor r21, r21
5b8c: 74 9f mul r23, r20
5b8e: e0 0d add r30, r0
5b90: a1 1d adc r26, r1
5b92: 55 1f adc r21, r21
5b94: 83 9f mul r24, r19
5b96: e0 0d add r30, r0
5b98: a1 1d adc r26, r1
5b9a: 56 1f adc r21, r22
5b9c: 84 9f mul r24, r20
5b9e: a0 0d add r26, r0
5ba0: 51 1d adc r21, r1
5ba2: 85 2f mov r24, r21
5ba4: 7a 2f mov r23, r26
5ba6: 6e 2f mov r22, r30
5ba8: 1f 90 pop r1
5baa: 0f 90 pop r0
5bac: 88 23 and r24, r24
5bae: 1a f4 brpl .+6 ; 0x5bb6 <__mulsf3x+0x7a>
5bb0: 93 95 inc r25
5bb2: 39 f4 brne .+14 ; 0x5bc2 <__mulsf3x+0x86>
5bb4: 8f cf rjmp .-226 ; 0x5ad4 <__fp_nan>
5bb6: 00 0c add r0, r0
5bb8: 11 1c adc r1, r1
5bba: bb 1f adc r27, r27
5bbc: 66 1f adc r22, r22
5bbe: 77 1f adc r23, r23
5bc0: 88 1f adc r24, r24
5bc2: 01 28 or r0, r1
5bc4: 08 95 ret
 
00005bc6 <__mulsi3>:
5bc6: 62 9f mul r22, r18
5bc8: d0 01 movw r26, r0
5bca: 73 9f mul r23, r19
5bcc: f0 01 movw r30, r0
5bce: 82 9f mul r24, r18
5bd0: e0 0d add r30, r0
5bd2: f1 1d adc r31, r1
5bd4: 64 9f mul r22, r20
5bd6: e0 0d add r30, r0
5bd8: f1 1d adc r31, r1
5bda: 92 9f mul r25, r18
5bdc: f0 0d add r31, r0
5bde: 83 9f mul r24, r19
5be0: f0 0d add r31, r0
5be2: 74 9f mul r23, r20
5be4: f0 0d add r31, r0
5be6: 65 9f mul r22, r21
5be8: f0 0d add r31, r0
5bea: 99 27 eor r25, r25
5bec: 72 9f mul r23, r18
5bee: b0 0d add r27, r0
5bf0: e1 1d adc r30, r1
5bf2: f9 1f adc r31, r25
5bf4: 63 9f mul r22, r19
5bf6: b0 0d add r27, r0
5bf8: e1 1d adc r30, r1
5bfa: f9 1f adc r31, r25
5bfc: bd 01 movw r22, r26
5bfe: cf 01 movw r24, r30
5c00: 11 24 eor r1, r1
5c02: 08 95 ret
 
00005c04 <__udivmodhi4>:
5c04: aa 1b sub r26, r26
5c06: bb 1b sub r27, r27
5c08: 51 e1 ldi r21, 0x11 ; 17
5c0a: 07 c0 rjmp .+14 ; 0x5c1a <__udivmodhi4_ep>
 
00005c0c <__udivmodhi4_loop>:
5c0c: aa 1f adc r26, r26
5c0e: bb 1f adc r27, r27
5c10: a6 17 cp r26, r22
5c12: b7 07 cpc r27, r23
5c14: 10 f0 brcs .+4 ; 0x5c1a <__udivmodhi4_ep>
5c16: a6 1b sub r26, r22
5c18: b7 0b sbc r27, r23
 
00005c1a <__udivmodhi4_ep>:
5c1a: 88 1f adc r24, r24
5c1c: 99 1f adc r25, r25
5c1e: 5a 95 dec r21
5c20: a9 f7 brne .-22 ; 0x5c0c <__udivmodhi4_loop>
5c22: 80 95 com r24
5c24: 90 95 com r25
5c26: bc 01 movw r22, r24
5c28: cd 01 movw r24, r26
5c2a: 08 95 ret
 
00005c2c <__divmodhi4>:
5c2c: 97 fb bst r25, 7
5c2e: 09 2e mov r0, r25
5c30: 07 26 eor r0, r23
5c32: 0a d0 rcall .+20 ; 0x5c48 <__divmodhi4_neg1>
5c34: 77 fd sbrc r23, 7
5c36: 04 d0 rcall .+8 ; 0x5c40 <__divmodhi4_neg2>
5c38: e5 df rcall .-54 ; 0x5c04 <__udivmodhi4>
5c3a: 06 d0 rcall .+12 ; 0x5c48 <__divmodhi4_neg1>
5c3c: 00 20 and r0, r0
5c3e: 1a f4 brpl .+6 ; 0x5c46 <__divmodhi4_exit>
 
00005c40 <__divmodhi4_neg2>:
5c40: 70 95 com r23
5c42: 61 95 neg r22
5c44: 7f 4f sbci r23, 0xFF ; 255
 
00005c46 <__divmodhi4_exit>:
5c46: 08 95 ret
 
00005c48 <__divmodhi4_neg1>:
5c48: f6 f7 brtc .-4 ; 0x5c46 <__divmodhi4_exit>
5c4a: 90 95 com r25
5c4c: 81 95 neg r24
5c4e: 9f 4f sbci r25, 0xFF ; 255
5c50: 08 95 ret
 
00005c52 <__udivmodsi4>:
5c52: a1 e2 ldi r26, 0x21 ; 33
5c54: 1a 2e mov r1, r26
5c56: aa 1b sub r26, r26
5c58: bb 1b sub r27, r27
5c5a: fd 01 movw r30, r26
5c5c: 0d c0 rjmp .+26 ; 0x5c78 <__udivmodsi4_ep>
 
00005c5e <__udivmodsi4_loop>:
5c5e: aa 1f adc r26, r26
5c60: bb 1f adc r27, r27
5c62: ee 1f adc r30, r30
5c64: ff 1f adc r31, r31
5c66: a2 17 cp r26, r18
5c68: b3 07 cpc r27, r19
5c6a: e4 07 cpc r30, r20
5c6c: f5 07 cpc r31, r21
5c6e: 20 f0 brcs .+8 ; 0x5c78 <__udivmodsi4_ep>
5c70: a2 1b sub r26, r18
5c72: b3 0b sbc r27, r19
5c74: e4 0b sbc r30, r20
5c76: f5 0b sbc r31, r21
 
00005c78 <__udivmodsi4_ep>:
5c78: 66 1f adc r22, r22
5c7a: 77 1f adc r23, r23
5c7c: 88 1f adc r24, r24
5c7e: 99 1f adc r25, r25
5c80: 1a 94 dec r1
5c82: 69 f7 brne .-38 ; 0x5c5e <__udivmodsi4_loop>
5c84: 60 95 com r22
5c86: 70 95 com r23
5c88: 80 95 com r24
5c8a: 90 95 com r25
5c8c: 9b 01 movw r18, r22
5c8e: ac 01 movw r20, r24
5c90: bd 01 movw r22, r26
5c92: cf 01 movw r24, r30
5c94: 08 95 ret
 
00005c96 <__divmodsi4>:
5c96: 97 fb bst r25, 7
5c98: 09 2e mov r0, r25
5c9a: 05 26 eor r0, r21
5c9c: 0e d0 rcall .+28 ; 0x5cba <__divmodsi4_neg1>
5c9e: 57 fd sbrc r21, 7
5ca0: 04 d0 rcall .+8 ; 0x5caa <__divmodsi4_neg2>
5ca2: d7 df rcall .-82 ; 0x5c52 <__udivmodsi4>
5ca4: 0a d0 rcall .+20 ; 0x5cba <__divmodsi4_neg1>
5ca6: 00 1c adc r0, r0
5ca8: 38 f4 brcc .+14 ; 0x5cb8 <__divmodsi4_exit>
 
00005caa <__divmodsi4_neg2>:
5caa: 50 95 com r21
5cac: 40 95 com r20
5cae: 30 95 com r19
5cb0: 21 95 neg r18
5cb2: 3f 4f sbci r19, 0xFF ; 255
5cb4: 4f 4f sbci r20, 0xFF ; 255
5cb6: 5f 4f sbci r21, 0xFF ; 255
 
00005cb8 <__divmodsi4_exit>:
5cb8: 08 95 ret
 
00005cba <__divmodsi4_neg1>:
5cba: f6 f7 brtc .-4 ; 0x5cb8 <__divmodsi4_exit>
5cbc: 90 95 com r25
5cbe: 80 95 com r24
5cc0: 70 95 com r23
5cc2: 61 95 neg r22
5cc4: 7f 4f sbci r23, 0xFF ; 255
5cc6: 8f 4f sbci r24, 0xFF ; 255
5cc8: 9f 4f sbci r25, 0xFF ; 255
5cca: 08 95 ret
 
00005ccc <__prologue_saves__>:
5ccc: 2f 92 push r2
5cce: 3f 92 push r3
5cd0: 4f 92 push r4
5cd2: 5f 92 push r5
5cd4: 6f 92 push r6
5cd6: 7f 92 push r7
5cd8: 8f 92 push r8
5cda: 9f 92 push r9
5cdc: af 92 push r10
5cde: bf 92 push r11
5ce0: cf 92 push r12
5ce2: df 92 push r13
5ce4: ef 92 push r14
5ce6: ff 92 push r15
5ce8: 0f 93 push r16
5cea: 1f 93 push r17
5cec: cf 93 push r28
5cee: df 93 push r29
5cf0: cd b7 in r28, 0x3d ; 61
5cf2: de b7 in r29, 0x3e ; 62
5cf4: ca 1b sub r28, r26
5cf6: db 0b sbc r29, r27
5cf8: 0f b6 in r0, 0x3f ; 63
5cfa: f8 94 cli
5cfc: de bf out 0x3e, r29 ; 62
5cfe: 0f be out 0x3f, r0 ; 63
5d00: cd bf out 0x3d, r28 ; 61
5d02: 09 94 ijmp
 
00005d04 <__epilogue_restores__>:
5d04: 2a 88 ldd r2, Y+18 ; 0x12
5d06: 39 88 ldd r3, Y+17 ; 0x11
5d08: 48 88 ldd r4, Y+16 ; 0x10
5d0a: 5f 84 ldd r5, Y+15 ; 0x0f
5d0c: 6e 84 ldd r6, Y+14 ; 0x0e
5d0e: 7d 84 ldd r7, Y+13 ; 0x0d
5d10: 8c 84 ldd r8, Y+12 ; 0x0c
5d12: 9b 84 ldd r9, Y+11 ; 0x0b
5d14: aa 84 ldd r10, Y+10 ; 0x0a
5d16: b9 84 ldd r11, Y+9 ; 0x09
5d18: c8 84 ldd r12, Y+8 ; 0x08
5d1a: df 80 ldd r13, Y+7 ; 0x07
5d1c: ee 80 ldd r14, Y+6 ; 0x06
5d1e: fd 80 ldd r15, Y+5 ; 0x05
5d20: 0c 81 ldd r16, Y+4 ; 0x04
5d22: 1b 81 ldd r17, Y+3 ; 0x03
5d24: aa 81 ldd r26, Y+2 ; 0x02
5d26: b9 81 ldd r27, Y+1 ; 0x01
5d28: ce 0f add r28, r30
5d2a: d1 1d adc r29, r1
5d2c: 0f b6 in r0, 0x3f ; 63
5d2e: f8 94 cli
5d30: de bf out 0x3e, r29 ; 62
5d32: 0f be out 0x3f, r0 ; 63
5d34: cd bf out 0x3d, r28 ; 61
5d36: ed 01 movw r28, r26
5d38: 08 95 ret
 
00005d3a <__tablejump2__>:
5d3a: ee 0f add r30, r30
5d3c: ff 1f adc r31, r31
 
00005d3e <__tablejump__>:
5d3e: 05 90 lpm r0, Z+
5d40: f4 91 lpm r31, Z
5d42: e0 2d mov r30, r0
5d44: 09 94 ijmp
 
00005d46 <__eeprom_read_byte_1F2021>:
5d46: f9 99 sbic 0x1f, 1 ; 31
5d48: fe cf rjmp .-4 ; 0x5d46 <__eeprom_read_byte_1F2021>
5d4a: b2 bd out 0x22, r27 ; 34
5d4c: a1 bd out 0x21, r26 ; 33
5d4e: f8 9a sbi 0x1f, 0 ; 31
5d50: 11 96 adiw r26, 0x01 ; 1
5d52: 00 b4 in r0, 0x20 ; 32
5d54: 08 95 ret
 
00005d56 <__eeprom_read_block_1F2021>:
5d56: f7 df rcall .-18 ; 0x5d46 <__eeprom_read_byte_1F2021>
5d58: 01 92 st Z+, r0
5d5a: 1a 94 dec r1
5d5c: e1 f7 brne .-8 ; 0x5d56 <__eeprom_read_block_1F2021>
5d5e: 08 95 ret
 
00005d60 <__eeprom_write_byte_1F2021>:
5d60: f9 99 sbic 0x1f, 1 ; 31
5d62: fe cf rjmp .-4 ; 0x5d60 <__eeprom_write_byte_1F2021>
5d64: b2 bd out 0x22, r27 ; 34
5d66: a1 bd out 0x21, r26 ; 33
5d68: 00 bc out 0x20, r0 ; 32
5d6a: 11 96 adiw r26, 0x01 ; 1
5d6c: 0f b6 in r0, 0x3f ; 63
5d6e: f8 94 cli
5d70: fa 9a sbi 0x1f, 2 ; 31
5d72: f9 9a sbi 0x1f, 1 ; 31
5d74: 0f be out 0x3f, r0 ; 63
5d76: 08 95 ret
 
00005d78 <__eeprom_write_block_1F2021>:
5d78: 01 90 ld r0, Z+
5d7a: f2 df rcall .-28 ; 0x5d60 <__eeprom_write_byte_1F2021>
5d7c: 1a 94 dec r1
5d7e: e1 f7 brne .-8 ; 0x5d78 <__eeprom_write_block_1F2021>
5d80: 08 95 ret
 
00005d82 <_exit>:
5d82: ff cf rjmp .-2 ; 0x5d82 <_exit>
/branches/v0.60_MicroMag3_Nick666/trunc/Flight-Ctrl_MEGA644_V0_60_MM3.map
0,0 → 1,1613
Archive member included because of file (symbol)
 
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
analog.o (__subsf3)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o) (__addsf3x)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
fc.o (__divsf3)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o) (__divsf3x)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
analog.o (__fixsfsi)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
analog.o (__floatsisf)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
analog.o (__ltsf2)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o) (__fp_merge)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o) (__fp_nanx)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o) (__fp_split3)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o) (__fp_zero)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
compass.o (__mulsf3)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o) (__mulsf3x)
c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_mulsi3.o)
timer0.o (__mulsi3)
c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodhi4.o)
analog.o (__udivmodhi4)
c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
analog.o (__divmodhi4)
c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodsi4.o)
printf_P.o (__udivmodsi4)
c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
timer0.o (__divmodsi4)
c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_prologue.o)
uart.o (__prologue_saves__)
c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_epilogue.o)
uart.o (__epilogue_restores__)
c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o (exit)
c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_tablejump.o)
uart.o (__tablejump2__)
c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
main.o (__do_copy_data)
c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
main.o (__do_clear_bss)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(memchr.o)
printf_P.o (memchr)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rb.1F2021.o)
main.o (__eeprom_read_byte_1F2021)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rblk.1F2021.o)
compass.o (__eeprom_read_block_1F2021)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wb.1F2021.o)
main.o (__eeprom_write_byte_1F2021)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wblk.1F2021.o)
compass.o (__eeprom_write_block_1F2021)
 
Allocating common symbols
Common symbol size file
 
MeineSlaveAdresse 0x1 uart.o
EE_Parameter 0x3a fc.o
DiffRoll 0x2 main.o
MesswertRoll 0x2 fc.o
Motor_Vorne 0x1 main.o
Motor_Hinten 0x1 main.o
MesswertNick 0x2 fc.o
Aktuell_ay 0x2 analog.o
MIN_GAS 0x1 fc.o
SendeBuffer 0x96 uart.o
NMEABuffer 0x96 uart.o
Mittelwert_AccHoch 0x2 fc.o
Debug_Timer 0x2 uart.o
DiffNick 0x2 main.o
DebugIn 0xb uart.o
VersionInfo 0xa uart.o
motor_rx 0x8 twimaster.o
MM3_calib 0x9 compass.o
PPM_in 0x16 rc.o
IntegralFaktor 0x4 fc.o
Motor_Rechts 0x1 main.o
Aktuell_az 0x2 analog.o
StartLuftdruck 0x2 analog.o
RxdBuffer 0x96 uart.o
acc_neutral 0x8 fc.o
PrintZiel 0x1 printf_P.o
Aktuell_Nick 0x2 analog.o
messanzahl_Druck 0x1 analog.o
Motor_Links 0x1 main.o
Aktuell_Roll 0x2 analog.o
Aktuell_ax 0x2 analog.o
s 0x1 main.o
h 0x1 main.o
Mittelwert_AccNick 0x2 fc.o
DebugOut 0x32 uart.o
DruckOffsetSetting 0x1 analog.o
Aktuell_Gier 0x2 analog.o
MM3 0xa compass.o
MAX_GAS 0x1 fc.o
MesswertGier 0x2 fc.o
GyroFaktor 0x4 fc.o
m 0x1 main.o
Mittelwert_AccRoll 0x2 fc.o
MotorWert 0x5 main.o
PPM_diff 0x16 rc.o
tmpLuftdruck 0x2 analog.o
 
Discarded input sections
 
.stabstr 0x00000000 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
 
Memory Configuration
 
Name Origin Length Attributes
text 0x00000000 0x00020000 xr
data 0x00800060 0x0000ffa0 rw !x
eeprom 0x00810000 0x00010000 rw !x
*default* 0x00000000 0xffffffff
 
Linker script and memory map
 
Address of section .data set to 0x800100
LOAD c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
LOAD main.o
LOAD uart.o
LOAD printf_P.o
LOAD timer0.o
LOAD analog.o
LOAD menu.o
LOAD compass.o
LOAD math.o
LOAD twimaster.o
LOAD rc.o
LOAD fc.o
LOAD GPS.o
LOAD c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a
LOAD c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a
LOAD c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a
LOAD c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a
 
.hash
*(.hash)
 
.dynsym
*(.dynsym)
 
.dynstr
*(.dynstr)
 
.gnu.version
*(.gnu.version)
 
.gnu.version_d
*(.gnu.version_d)
 
.gnu.version_r
*(.gnu.version_r)
 
.rel.init
*(.rel.init)
 
.rela.init
*(.rela.init)
 
.rel.text
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
 
.rela.text
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
 
.rel.fini
*(.rel.fini)
 
.rela.fini
*(.rela.fini)
 
.rel.rodata
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
 
.rela.rodata
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
 
.rel.data
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
 
.rela.data
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
 
.rel.ctors
*(.rel.ctors)
 
.rela.ctors
*(.rela.ctors)
 
.rel.dtors
*(.rel.dtors)
 
.rela.dtors
*(.rela.dtors)
 
.rel.got
*(.rel.got)
 
.rela.got
*(.rela.got)
 
.rel.bss
*(.rel.bss)
 
.rela.bss
*(.rela.bss)
 
.rel.plt
*(.rel.plt)
 
.rela.plt
*(.rela.plt)
 
.text 0x00000000 0x5d84
*(.vectors)
.vectors 0x00000000 0x70 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
0x00000000 __vectors
0x00000000 __vector_default
*(.vectors)
*(.progmem.gcc*)
.progmem.gcc_sw_table
0x00000070 0x28 uart.o
.progmem.gcc_sw_table
0x00000098 0x10 analog.o
.progmem.gcc_sw_table
0x000000a8 0x1a menu.o
*(.progmem*)
.progmem.data 0x000000c2 0xf9 main.o
.progmem.data 0x000001bb 0x2 analog.o
.progmem.data 0x000001bd 0x2dd menu.o
.progmem.data 0x0000049a 0x27a math.o
0x000005a8 pgm_sinus_f
0x0000049a pgm_atan
0x00000714 . = ALIGN (0x2)
0x00000714 __trampolines_start = .
*(.trampolines)
.trampolines 0x00000714 0x0 linker stubs
*(.trampolines*)
0x00000714 __trampolines_end = .
*(.jumptables)
*(.jumptables*)
*(.lowtext)
*(.lowtext*)
0x00000714 __ctors_start = .
*(.ctors)
0x00000714 __ctors_end = .
0x00000714 __dtors_start = .
*(.dtors)
0x00000714 __dtors_end = .
SORT(*)(.ctors)
SORT(*)(.dtors)
*(.init0)
.init0 0x00000714 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
0x00000714 __init
*(.init0)
*(.init1)
*(.init1)
*(.init2)
.init2 0x00000714 0xc c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
*(.init2)
*(.init3)
*(.init3)
*(.init4)
.init4 0x00000720 0x16 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
0x00000720 __do_copy_data
.init4 0x00000736 0x10 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
0x00000736 __do_clear_bss
*(.init4)
*(.init5)
*(.init5)
*(.init6)
*(.init6)
*(.init7)
*(.init7)
*(.init8)
*(.init8)
*(.init9)
.init9 0x00000746 0x8 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
*(.init9)
*(.text)
.text 0x0000074e 0x4 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
0x0000074e __vector_1
0x0000074e __bad_interrupt
0x0000074e __vector_6
0x0000074e __vector_3
0x0000074e __vector_23
0x0000074e __vector_25
0x0000074e __vector_11
0x0000074e __vector_13
0x0000074e __vector_17
0x0000074e __vector_7
0x0000074e __vector_27
0x0000074e __vector_5
0x0000074e __vector_4
0x0000074e __vector_2
0x0000074e __vector_21
0x0000074e __vector_15
0x0000074e __vector_8
0x0000074e __vector_14
0x0000074e __vector_10
0x0000074e __vector_16
.text 0x00000752 0x3da main.o
0x00000760 WriteParameterSet
0x00000794 ReadParameterSet
0x000007be main
0x00000752 GetActiveParamSetNumber
.text 0x00000b2c 0x65a uart.o
0x00000b2c __vector_22
0x00000f36 WriteProgramData
0x00000f38 UART_Init
0x0000104a BearbeiteRxDaten
0x00000d3c AddCRC
0x00000f6e DatenUebertragung
0x00000e64 Decode64
0x00000d98 SendOutData
0x00000b98 __vector_20
0x00000f14 uart_putchar
.text 0x00001186 0x5a4 printf_P.o
0x00001186 Putchar
0x00001238 _printf_P
0x000011b8 PAD_0
0x000011e4 PRINTP
0x00001210 PRINT
0x000011ce PAD_SP
.text 0x0000172a 0x290 timer0.o
0x00001764 SetDelay
0x0000172a Timer_Init
0x00001776 CheckDelay
0x00001996 Delay_ms
0x0000178e __vector_9
0x000018d4 __vector_18
.text 0x000019ba 0x6c0 analog.o
0x000019c6 __vector_24
0x000019ba ADC_Init
0x00001ff2 SucheLuftruckOffset
.text 0x0000207a 0x848 menu.o
0x0000207a LcdClear
0x0000208c Menu
.text 0x000028c2 0x580 compass.o
0x00002c2a timer0_MM3
0x00002c8e calib_MM3
0x000028c2 __vector_19
0x0000295e heading_MM3
0x00002e1a init_MM3
.text 0x00002e42 0x220 math.o
0x00002e42 atan2_i
0x00003052 cos_f
0x00002f7e pgm_read_float
0x00002f92 sin_f
.text 0x00003062 0x134 twimaster.o
0x0000308a i2c_receive_byte
0x00003092 i2c_receive_last_byte
0x0000306e i2c_start
0x00003076 i2c_stop
0x00003062 i2c_init
0x0000309a __vector_26
0x0000307e i2c_write_byte
.text 0x00003196 0x168 rc.o
0x000031c0 __vector_12
0x00003196 rc_sum_init
.text 0x000032fe 0x258a fc.o
0x00004068 DefaultKonstanten1
0x0000414a SendMotorData
0x000032fe Mittelwert
0x00004444 Piep
0x000037bc CalibrierMittelwert
0x000041d8 SetNeutral
0x0000437c calib_acc
0x00003f8e DefaultKonstanten2
0x00003af4 ParameterZuordnung
0x0000446e MotorRegler
.text 0x00005888 0x54 GPS.o
0x00005888 GPS_Neutral
0x000058ca GPS_BerechneZielrichtung
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_mulsi3.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodhi4.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodsi4.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_prologue.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_epilogue.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_tablejump.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
.text 0x000058dc 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
.text 0x000058dc 0x1a c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(memchr.o)
0x000058dc memchr
.text 0x000058f6 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rb.1F2021.o)
.text 0x000058f6 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rblk.1F2021.o)
.text 0x000058f6 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wb.1F2021.o)
.text 0x000058f6 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wblk.1F2021.o)
0x000058f6 . = ALIGN (0x2)
*(.text.*)
.text.fplib 0x000058f6 0xa c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
0x000058f6 __subsf3
0x000058f8 __addsf3
.text.fplib 0x00005900 0x7c c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
0x00005900 __addsf3x
.text.fplib 0x0000597c 0x6 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
0x0000597c __divsf3
.text.fplib 0x00005982 0x86 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
0x00005982 __divsf3x
.text.fplib 0x00005a08 0x36 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
0x00005a08 __fixsfsi
0x00005a2e __fp_lneg
0x00005a08 __fixunssfsi
.text.fplib 0x00005a3e 0x18 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
0x00005a42 __floatsisf
0x00005a3e __floatunssisf
.text.fplib 0x00005a56 0x44 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
0x00005a56 __lesf2
0x00005a56 __nesf2
0x00005a5c __gtsf2
0x00005a56 __eqsf2
0x00005a62 __cmpsf2
0x00005a56 __ltsf2
0x00005a5c __gesf2
.text.fplib 0x00005a9a 0x3a c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
0x00005aa4 __fp_merge
.text.fplib 0x00005ad4 0x6 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
0x00005ad4 __fp_nanERANGE
0x00005ad4 __fp_nan
0x00005ad4 __fp_nanEDOM
0x00005ad4 __fp_nanx
.text.fplib 0x00005ada 0x52 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
0x00005ada __fp_split3
0x00005ae0 __fp_split2
0x00005af2 __fp_split1
0x00005b0e __fp_split_a
.text.fplib 0x00005b2c 0xa c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
0x00005b2c __fp_zero
0x00005b32 __fp_zerox
.text.fplib 0x00005b36 0x6 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
0x00005b36 __mulsf3
.text.fplib 0x00005b3c 0x8a c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
0x00005b3c __mulsf3x
.text.libgcc 0x00005bc6 0x3e c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_mulsi3.o)
0x00005bc6 __mulsi3
.text.libgcc 0x00005c04 0x28 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodhi4.o)
0x00005c04 __udivmodhi4
.text.libgcc 0x00005c2c 0x26 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
0x00005c2c __divmodhi4
0x00005c2c _div
.text.libgcc 0x00005c52 0x44 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodsi4.o)
0x00005c52 __udivmodsi4
.text.libgcc 0x00005c96 0x36 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
0x00005c96 __divmodsi4
.text.libgcc 0x00005ccc 0x38 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_prologue.o)
0x00005ccc __prologue_saves__
.text.libgcc 0x00005d04 0x36 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_epilogue.o)
0x00005d04 __epilogue_restores__
.text.libgcc 0x00005d3a 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
.text.libgcc 0x00005d3a 0xc c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_tablejump.o)
0x00005d3e __tablejump__
0x00005d3a __tablejump2__
.text.libgcc 0x00005d46 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
.text.libgcc 0x00005d46 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
.text.eeprom 0x00005d46 0x10 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rb.1F2021.o)
0x00005d46 __eeprom_read_byte_1F2021
.text.eeprom 0x00005d56 0xa c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rblk.1F2021.o)
0x00005d56 __eeprom_read_block_1F2021
.text.eeprom 0x00005d60 0x18 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wb.1F2021.o)
0x00005d60 __eeprom_write_byte_1F2021
.text.eeprom 0x00005d78 0xa c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wblk.1F2021.o)
0x00005d78 __eeprom_write_block_1F2021
0x00005d82 . = ALIGN (0x2)
*(.fini9)
.fini9 0x00005d82 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
0x00005d82 exit
0x00005d82 _exit
*(.fini9)
*(.fini8)
*(.fini8)
*(.fini7)
*(.fini7)
*(.fini6)
*(.fini6)
*(.fini5)
*(.fini5)
*(.fini4)
*(.fini4)
*(.fini3)
*(.fini3)
*(.fini2)
*(.fini2)
*(.fini1)
*(.fini1)
*(.fini0)
.fini0 0x00005d82 0x2 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
*(.fini0)
0x00005d84 _etext = .
 
.data 0x00800100 0x8c load address 0x00005d84
0x00800100 PROVIDE (__data_start, .)
*(.data)
.data 0x00800100 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
.data 0x00800100 0x0 main.o
.data 0x00800100 0x2 uart.o
0x00800101 PcZugriff
0x00800100 UebertragungAbgeschlossen
.data 0x00800102 0x0 printf_P.o
.data 0x00800102 0x2 timer0.o
.data 0x00800104 0x8 analog.o
0x00800104 UBat
0x0080010a MessLuftdruck
0x00800106 Luftdruck
.data 0x0080010c 0x5b menu.o
0x0080010c Array
0x00800116 DisplayBuff
.data 0x00800167 0x0 compass.o
.data 0x00800167 0x0 math.o
.data 0x00800167 0x0 twimaster.o
.data 0x00800167 0x1 rc.o
0x00800167 NewPpmData
.data 0x00800168 0x23 fc.o
0x0080017c Ki
0x00800180 Parameter_Luftdruck_D
0x00800184 Parameter_KompassWirkung
0x00800189 Parameter_ServoNickControl
0x00800185 Parameter_Gyro_P
0x00800182 Parameter_Hoehe_P
0x00800183 Parameter_Hoehe_ACC_Wirkung
0x00800186 Parameter_Gyro_I
0x00800181 Parameter_MaxHoehe
0x00800188 Parameter_I_Faktor
0x00800178 Kp
0x00800187 Parameter_Gier_P
.data 0x0080018b 0x0 GPS.o
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_mulsi3.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodhi4.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodsi4.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_prologue.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_epilogue.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_tablejump.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(memchr.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rb.1F2021.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rblk.1F2021.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wb.1F2021.o)
.data 0x0080018b 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wblk.1F2021.o)
*(.data*)
*(.rodata)
*(.rodata*)
*(.gnu.linkonce.d*)
0x0080018c . = ALIGN (0x2)
*fill* 0x0080018b 0x1 00
0x0080018c _edata = .
0x0080018c PROVIDE (__data_end, .)
 
.bss 0x0080018c 0x3a0
0x0080018c PROVIDE (__bss_start, .)
*(.bss)
.bss 0x0080018c 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
.bss 0x0080018c 0x0 main.o
.bss 0x0080018c 0x17 uart.o
0x0080018c DebugGetAnforderung
0x00800190 SioTmp
0x00800195 PC_DebugTimeout
0x0080018f GetVersionAnforderung
0x00800192 NeueKoordinateEmpfangen
0x0080018e DebugDataAnforderung
0x00800196 MotorTest
0x00800191 NeuerDatensatzEmpfangen
0x0080018d DebugDisplayAnforderung
0x00800193 CntCrcError
0x00800194 AnzahlEmpfangsBytes
.bss 0x008001a3 0x0 printf_P.o
.bss 0x008001a3 0x8 timer0.o
0x008001a6 beeptime
0x008001a3 CountMilliseconds
0x008001a5 UpdateMotor
0x008001a8 ServoValue
.bss 0x008001ab 0x18 analog.o
0x008001bd HoeheD
0x008001af AccumulateGier
0x008001ba messanzahl_AccNick
0x008001bc messanzahl_AccHoch
0x008001ad AccumulateRoll
0x008001bf ZaehlMessungen
0x008001b5 accumulate_AccHoch
0x008001bb messanzahl_AccRoll
0x008001b1 accumulate_AccRoll
0x008001b7 MessanzahlNick
0x008001b9 MessanzahlGier
0x008001b3 accumulate_AccNick
0x008001ab AccumulateNick
0x008001b8 MessanzahlRoll
.bss 0x008001c3 0x5 menu.o
0x008001c5 DispPtr
0x008001c6 RemoteTasten
0x008001c3 TestInt
.bss 0x008001c8 0x1 compass.o
.bss 0x008001c9 0x0 math.o
.bss 0x008001c9 0x3 twimaster.o
0x008001c9 twi_state
0x008001ca motor
.bss 0x008001cc 0x4 rc.o
.bss 0x008001d0 0x7a fc.o
0x008001ff Mess_Integral_Gier2
0x0080021d StickGier
0x008001ef Mess_IntegralNick2
0x008001db IntegralNick2
0x00800218 SenderOkay
0x008001e7 Integral_Gier
0x00800219 StickNick
0x00800212 Poti2
0x0080021f MotorenEin
0x00800220 HoehenWert
0x008001f7 Mess_IntegralRoll2
0x00800214 Poti3
0x00800224 Parameter_UserParam1
0x008001d3 AdNeutralRoll
0x0080020e Notlandung
0x008001d7 IntegralNick
0x00800203 Mess_Integral_Hoch
0x008001fb Mess_Integral_Gier
0x00800227 Parameter_UserParam4
0x00800209 KompassStartwert
0x00800225 Parameter_UserParam2
0x00800207 KompassValue
0x0080020b KompassRichtung
0x008001f3 Mess_IntegralRoll
0x0080021b StickRoll
0x008001d1 AdNeutralNick
0x008001d0 Timeout
0x008001e3 IntegralRoll2
0x00800210 Poti1
0x00800226 Parameter_UserParam3
0x008001d5 AdNeutralGier
0x0080020d updKompass
0x0080020f HoehenReglerAktiv
0x00800222 SollHoehe
0x00800216 Poti4
0x008001eb Mess_IntegralNick
0x008001df IntegralRoll
.bss 0x0080024a 0x14 GPS.o
0x00800256 GpsZiel_X
0x00800252 GpsAktuell_Y
0x0080024a GPS_Nick
0x0080024e GpsAktuell_X
0x0080025a GpsZiel_Y
0x0080024c GPS_Roll
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_mulsi3.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodhi4.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodsi4.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_prologue.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_epilogue.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_tablejump.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(memchr.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rb.1F2021.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rblk.1F2021.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wb.1F2021.o)
.bss 0x0080025e 0x0 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wblk.1F2021.o)
*(.bss*)
*(COMMON)
COMMON 0x0080025e 0x10 main.o
0x0080025e DiffRoll
0x00800260 Motor_Vorne
0x00800261 Motor_Hinten
0x00800262 DiffNick
0x00800264 Motor_Rechts
0x00800265 Motor_Links
0x00800266 s
0x00800267 h
0x00800268 m
0x00800269 MotorWert
COMMON 0x0080026e 0x20c uart.o
0x0080026e MeineSlaveAdresse
0x0080026f SendeBuffer
0x00800305 NMEABuffer
0x0080039b Debug_Timer
0x0080039d DebugIn
0x008003a8 VersionInfo
0x008003b2 RxdBuffer
0x00800448 DebugOut
COMMON 0x0080047a 0x1 printf_P.o
0x0080047a PrintZiel
COMMON 0x0080047b 0x12 analog.o
0x0080047b Aktuell_ay
0x0080047d Aktuell_az
0x0080047f StartLuftdruck
0x00800481 Aktuell_Nick
0x00800483 messanzahl_Druck
0x00800484 Aktuell_Roll
0x00800486 Aktuell_ax
0x00800488 DruckOffsetSetting
0x00800489 Aktuell_Gier
0x0080048b tmpLuftdruck
COMMON 0x0080048d 0x13 compass.o
0x0080048d MM3_calib
0x00800496 MM3
COMMON 0x008004a0 0x8 twimaster.o
0x008004a0 motor_rx
COMMON 0x008004a8 0x2c rc.o
0x008004a8 PPM_in
0x008004be PPM_diff
COMMON 0x008004d4 0x58 fc.o
0x008004d4 EE_Parameter
0x0080050e MesswertRoll
0x00800510 MesswertNick
0x00800512 MIN_GAS
0x00800513 Mittelwert_AccHoch
0x00800515 IntegralFaktor
0x00800519 acc_neutral
0x00800521 Mittelwert_AccNick
0x00800523 MAX_GAS
0x00800524 MesswertGier
0x00800526 GyroFaktor
0x0080052a Mittelwert_AccRoll
0x0080052c PROVIDE (__bss_end, .)
0x00005d84 __data_load_start = LOADADDR (.data)
0x00005e10 __data_load_end = (__data_load_start + SIZEOF (.data))
 
.noinit 0x0080052c 0x0
0x0080052c PROVIDE (__noinit_start, .)
*(.noinit*)
0x0080052c PROVIDE (__noinit_end, .)
0x0080052c _end = .
0x0080052c PROVIDE (__heap_start, .)
 
.eeprom 0x00810000 0x13d
*(.eeprom*)
.eeprom 0x00810000 0x12c main.o
0x00810000 EEPromArray
0x0081000a EEParameterArray
.eeprom 0x0081012c 0x9 compass.o
0x0081012c ee_calib
.eeprom 0x00810135 0x8 fc.o
0x00810135 ee_acc_neutral
0x0081013d __eeprom_end = .
 
.stab 0x00000000 0x378
*(.stab)
.stab 0x00000000 0x378 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
 
.stabstr 0x00000000 0x71
*(.stabstr)
.stabstr 0x00000000 0x71 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
 
.stab.excl
*(.stab.excl)
 
.stab.exclstr
*(.stab.exclstr)
 
.stab.index
*(.stab.index)
 
.stab.indexstr
*(.stab.indexstr)
 
.comment
*(.comment)
 
.debug
*(.debug)
 
.line
*(.line)
 
.debug_srcinfo
*(.debug_srcinfo)
 
.debug_sfnames
*(.debug_sfnames)
 
.debug_aranges
*(.debug_aranges)
 
.debug_pubnames
*(.debug_pubnames)
 
.debug_info
*(.debug_info)
*(.gnu.linkonce.wi.*)
 
.debug_abbrev
*(.debug_abbrev)
 
.debug_line
*(.debug_line)
 
.debug_frame
*(.debug_frame)
 
.debug_str
*(.debug_str)
 
.debug_loc
*(.debug_loc)
 
.debug_macinfo
*(.debug_macinfo)
OUTPUT(Flight-Ctrl_MEGA644_V0_60_MM3.elf elf32-avr)
LOAD linker stubs
 
Cross Reference Table
 
Symbol File
ADC_Init analog.o
main.o
AccumulateGier analog.o
fc.o
menu.o
AccumulateNick analog.o
fc.o
menu.o
AccumulateRoll analog.o
fc.o
menu.o
AdNeutralGier fc.o
rc.o
menu.o
analog.o
AdNeutralNick fc.o
rc.o
menu.o
analog.o
AdNeutralRoll fc.o
rc.o
menu.o
analog.o
AddCRC uart.o
Aktuell_Gier analog.o
Aktuell_Nick analog.o
Aktuell_Roll analog.o
Aktuell_ax analog.o
Aktuell_ay analog.o
Aktuell_az fc.o
menu.o
analog.o
AnzahlEmpfangsBytes uart.o
Array menu.o
BearbeiteRxDaten uart.o
main.o
CalibrierMittelwert fc.o
CheckDelay timer0.o
fc.o
compass.o
uart.o
main.o
CntCrcError uart.o
CountMilliseconds timer0.o
DatenUebertragung uart.o
main.o
DebugDataAnforderung uart.o
DebugDisplayAnforderung uart.o
DebugGetAnforderung uart.o
DebugIn uart.o
main.o
DebugOut fc.o
compass.o
uart.o
Debug_Timer uart.o
Decode64 uart.o
DefaultKonstanten1 fc.o
main.o
DefaultKonstanten2 fc.o
main.o
Delay_ms timer0.o
fc.o
analog.o
DiffNick GPS.o
fc.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
DiffRoll GPS.o
fc.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
DispPtr menu.o
printf_P.o
DisplayBuff menu.o
printf_P.o
uart.o
DruckOffsetSetting menu.o
analog.o
EEParameterArray main.o
EEPromArray main.o
fc.o
analog.o
uart.o
EE_Parameter fc.o
compass.o
menu.o
timer0.o
uart.o
main.o
GPS_BerechneZielrichtung GPS.o
GPS_Neutral GPS.o
fc.o
GPS_Nick GPS.o
fc.o
GPS_Roll GPS.o
fc.o
GetActiveParamSetNumber main.o
fc.o
menu.o
uart.o
GetVersionAnforderung uart.o
GpsAktuell_X GPS.o
GpsAktuell_Y GPS.o
GpsZiel_X GPS.o
GpsZiel_Y GPS.o
GyroFaktor fc.o
HoeheD analog.o
fc.o
HoehenReglerAktiv fc.o
HoehenWert fc.o
menu.o
analog.o
IntegralFaktor fc.o
IntegralNick fc.o
compass.o
menu.o
timer0.o
IntegralNick2 fc.o
IntegralRoll fc.o
compass.o
menu.o
IntegralRoll2 fc.o
Integral_Gier fc.o
Ki fc.o
KompassRichtung fc.o
menu.o
KompassStartwert fc.o
menu.o
KompassValue fc.o
menu.o
Kp fc.o
LcdClear menu.o
main.o
Luftdruck analog.o
fc.o
MAX_GAS fc.o
MIN_GAS fc.o
MM3 compass.o
MM3_calib compass.o
menu.o
MeineSlaveAdresse uart.o
Menu menu.o
uart.o
MessLuftdruck analog.o
fc.o
menu.o
Mess_IntegralNick fc.o
analog.o
Mess_IntegralNick2 fc.o
analog.o
Mess_IntegralRoll fc.o
analog.o
Mess_IntegralRoll2 fc.o
analog.o
Mess_Integral_Gier fc.o
analog.o
Mess_Integral_Gier2 fc.o
analog.o
Mess_Integral_Hoch fc.o
analog.o
MessanzahlGier analog.o
fc.o
menu.o
MessanzahlNick analog.o
fc.o
menu.o
MessanzahlRoll analog.o
fc.o
menu.o
MesswertGier fc.o
MesswertNick fc.o
MesswertRoll fc.o
Mittelwert fc.o
Mittelwert_AccHoch fc.o
Mittelwert_AccNick fc.o
Mittelwert_AccRoll fc.o
MotorRegler fc.o
main.o
MotorTest uart.o
fc.o
MotorWert GPS.o
fc.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Motor_Hinten GPS.o
fc.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Motor_Links GPS.o
fc.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Motor_Rechts GPS.o
fc.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Motor_Vorne GPS.o
fc.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
MotorenEin fc.o
GPS.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
NMEABuffer uart.o
NeueKoordinateEmpfangen uart.o
NeuerDatensatzEmpfangen uart.o
NewPpmData rc.o
fc.o
Notlandung fc.o
PAD_0 printf_P.o
PAD_SP printf_P.o
PC_DebugTimeout uart.o
PPM_diff fc.o
rc.o
PPM_in fc.o
rc.o
compass.o
menu.o
main.o
PRINT printf_P.o
PRINTP printf_P.o
ParameterZuordnung fc.o
Parameter_Gier_P fc.o
Parameter_Gyro_I fc.o
Parameter_Gyro_P fc.o
Parameter_Hoehe_ACC_Wirkung fc.o
Parameter_Hoehe_P fc.o
Parameter_I_Faktor fc.o
Parameter_KompassWirkung fc.o
Parameter_Luftdruck_D fc.o
Parameter_MaxHoehe fc.o
Parameter_ServoNickControl fc.o
menu.o
timer0.o
Parameter_UserParam1 fc.o
Parameter_UserParam2 fc.o
Parameter_UserParam3 fc.o
Parameter_UserParam4 fc.o
PcZugriff uart.o
fc.o
main.o
Piep fc.o
uart.o
Poti1 fc.o
menu.o
Poti2 fc.o
menu.o
Poti3 fc.o
menu.o
Poti4 fc.o
menu.o
PrintZiel printf_P.o
Putchar printf_P.o
ReadParameterSet main.o
fc.o
uart.o
RemoteTasten menu.o
GPS.o
fc.o
rc.o
twimaster.o
math.o
compass.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
RxdBuffer uart.o
SendMotorData fc.o
main.o
SendOutData uart.o
SendeBuffer uart.o
SenderOkay fc.o
GPS.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
ServoValue timer0.o
menu.o
SetDelay timer0.o
fc.o
compass.o
uart.o
main.o
SetNeutral fc.o
main.o
SioTmp uart.o
SollHoehe fc.o
menu.o
StartLuftdruck fc.o
analog.o
StickGier fc.o
GPS.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
StickNick fc.o
GPS.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
StickRoll fc.o
GPS.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
SucheLuftruckOffset analog.o
fc.o
main.o
TestInt menu.o
Timeout fc.o
GPS.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
Timer_Init timer0.o
main.o
UART_Init uart.o
main.o
UBat analog.o
menu.o
main.o
UebertragungAbgeschlossen uart.o
UpdateMotor timer0.o
main.o
VersionInfo uart.o
main.o
WriteParameterSet main.o
uart.o
WriteProgramData uart.o
ZaehlMessungen analog.o
fc.o
__addsf3 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
fc.o
compass.o
analog.o
__addsf3x c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
__bad_interrupt c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__bss_end c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
__bss_start c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
__cmpsf2 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
__data_end c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
__data_load_start c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
__data_start c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
__divmodhi4 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
fc.o
rc.o
compass.o
menu.o
analog.o
__divmodsi4 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
fc.o
math.o
compass.o
menu.o
analog.o
timer0.o
__divsf3 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
fc.o
__divsf3x c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
__do_clear_bss c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_clear_bss.o)
GPS.o
fc.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
__do_copy_data c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_copy_data.o)
GPS.o
fc.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
__eeprom_read_block_1F2021 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rblk.1F2021.o)
fc.o
compass.o
__eeprom_read_byte_1F2021 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rb.1F2021.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_rblk.1F2021.o)
analog.o
main.o
__eeprom_write_block_1F2021 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wblk.1F2021.o)
fc.o
compass.o
__eeprom_write_byte_1F2021 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wb.1F2021.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(ee_wblk.1F2021.o)
fc.o
analog.o
uart.o
main.o
__epilogue_restores__ c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_epilogue.o)
fc.o
math.o
compass.o
printf_P.o
uart.o
__eqsf2 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
__fixsfsi c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
fc.o
compass.o
menu.o
analog.o
__fixunssfsi c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
__floatsisf c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
fc.o
math.o
compass.o
analog.o
__floatunssisf c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
__fp_lneg c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
__fp_merge c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(floatsisf.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
__fp_nan c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
__fp_nanEDOM c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
__fp_nanERANGE c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
__fp_nanx c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_nan.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
__fp_split1 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
__fp_split2 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
__fp_split3 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
__fp_split_a c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_split.o)
__fp_zero c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_merge.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fixsfsi.o)
__fp_zerox c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_zero.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(divsf3x.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3x.o)
__gesf2 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
__gtsf2 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
analog.o
__heap_end c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__init c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__lesf2 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
__ltsf2 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
fc.o
analog.o
__mulsf3 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
fc.o
math.o
compass.o
__mulsf3x c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3x.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(mulsf3.o)
__mulsi3 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_mulsi3.o)
fc.o
math.o
compass.o
timer0.o
__nesf2 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(fp_cmp.o)
__prologue_saves__ c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_prologue.o)
fc.o
math.o
compass.o
printf_P.o
uart.o
__stack c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__subsf3 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libm.a(addsf3.o)
compass.o
analog.o
__tablejump2__ c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_tablejump.o)
menu.o
analog.o
uart.o
__tablejump__ c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_tablejump.o)
__udivmodhi4 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodhi4.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
analog.o
__udivmodsi4 c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_udivmodsi4.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodsi4.o)
printf_P.o
__vector_1 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_10 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_11 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_12 rc.o
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_13 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_14 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_15 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_16 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_17 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_18 timer0.o
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_19 compass.o
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_2 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_20 uart.o
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_21 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_22 uart.o
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_23 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_24 analog.o
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_25 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_26 twimaster.o
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_27 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_3 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_4 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_5 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_6 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_7 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_8 c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_9 timer0.o
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vector_default c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
__vectors c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
_div c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_divmodhi4.o)
_exit c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
_printf_P printf_P.o
menu.o
analog.o
main.o
acc_neutral fc.o
menu.o
analog.o
accumulate_AccHoch analog.o
fc.o
accumulate_AccNick analog.o
fc.o
menu.o
accumulate_AccRoll analog.o
fc.o
menu.o
atan2_i math.o
compass.o
beeptime timer0.o
fc.o
compass.o
main.o
calib_MM3 compass.o
main.o
calib_acc fc.o
main.o
cos_f math.o
compass.o
ee_acc_neutral fc.o
ee_calib compass.o
exit c:/winavr/bin/../lib/gcc/avr/4.1.2/avr5\libgcc.a(_exit.o)
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
h GPS.o
fc.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
heading_MM3 compass.o
fc.o
i2c_init twimaster.o
main.o
i2c_receive_byte twimaster.o
i2c_receive_last_byte twimaster.o
i2c_start twimaster.o
fc.o
i2c_stop twimaster.o
i2c_write_byte twimaster.o
init_MM3 compass.o
main.o
m GPS.o
fc.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
main main.o
c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5/crtm644.o
memchr c:/winavr/bin/../lib/gcc/avr/4.1.2/../../../../avr/lib/avr5\libc.a(memchr.o)
printf_P.o
messanzahl_AccHoch analog.o
fc.o
messanzahl_AccNick analog.o
fc.o
menu.o
messanzahl_AccRoll analog.o
fc.o
menu.o
messanzahl_Druck analog.o
motor twimaster.o
fc.o
motor_rx twimaster.o
pgm_atan math.o
pgm_read_float math.o
pgm_sinus_f math.o
rc_sum_init rc.o
main.o
s GPS.o
fc.o
rc.o
twimaster.o
math.o
compass.o
menu.o
analog.o
timer0.o
printf_P.o
uart.o
main.o
sin_f math.o
compass.o
timer0_MM3 compass.o
timer0.o
tmpLuftdruck analog.o
twi_state twimaster.o
fc.o
uart_putchar uart.o
printf_P.o
updKompass fc.o
/branches/v0.60_MicroMag3_Nick666/trunc/Flight-Ctrl_MEGA644_V0_60_MM3.sym
0,0 → 1,479
00000000 W __heap_end
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 a __tmp_reg__
00000000 W __vector_default
00000000 T __vectors
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
00000001 a __zero_reg__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003d a __SP_L__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003e a __SP_H__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
0000003f a __SREG__
000000c2 t __c.2026
000000c6 t __c.2024
000000ce t __c.2022
000000da t __c.2020
000000e8 t __c.2018
000000ed t __c.2013
0000010a t __c.2011
00000123 t __c.2009
00000138 t __c.2004
00000153 t __c.1998
00000182 t __c.1996
000001a3 t __c.1994
000001bb t __c.1996
000001bd t __c.2096
000001cb t __c.2094
000001d9 t __c.2092
000001e7 t __c.2090
000001f1 t __c.2087
00000200 t __c.2085
0000020f t __c.2083
0000021e t __c.2081
00000226 t __c.2078
00000234 t __c.2076
00000242 t __c.2074
00000250 t __c.2072
00000258 t __c.2069
00000264 t __c.2067
00000270 t __c.2065
0000027c t __c.2063
00000288 t __c.2060
00000297 t __c.2058
000002a6 t __c.2056
000002b5 t __c.2054
000002c4 t __c.2051
000002d3 t __c.2049
000002e2 t __c.2046
000002f1 t __c.2044
00000300 t __c.2042
0000030f t __c.2040
0000031c t __c.2037
0000032b t __c.2035
0000033a t __c.2033
00000349 t __c.2031
00000357 t __c.2028
00000367 t __c.2026
00000377 t __c.2024
00000387 t __c.2022
00000397 t __c.2019
000003a7 t __c.2017
000003b7 t __c.2015
000003c7 t __c.2013
000003d7 t __c.2010
000003e6 t __c.2008
000003f5 t __c.2006
00000404 t __c.2004
0000040e t __c.2001
0000041c t __c.1999
00000423 t __c.1997
00000432 t __c.1995
00000441 t __c.1993
00000450 t __c.1991
0000045f t __c.1987
0000046f t __c.1985
0000047c t __c.1983
00000483 t __c.1981
00000495 t __c.1978
0000049a T pgm_atan
000005a8 T pgm_sinus_f
00000714 T __ctors_end
00000714 T __ctors_start
00000714 T __dtors_end
00000714 T __dtors_start
00000714 W __init
00000714 T __trampolines_end
00000714 T __trampolines_start
00000720 T __do_copy_data
0000072c t .do_copy_data_loop
00000730 t .do_copy_data_start
00000736 T __do_clear_bss
0000073e t .do_clear_bss_loop
00000740 t .do_clear_bss_start
0000074e T __bad_interrupt
0000074e W __vector_1
0000074e W __vector_10
0000074e W __vector_11
0000074e W __vector_13
0000074e W __vector_14
0000074e W __vector_15
0000074e W __vector_16
0000074e W __vector_17
0000074e W __vector_2
0000074e W __vector_21
0000074e W __vector_23
0000074e W __vector_25
0000074e W __vector_27
0000074e W __vector_3
0000074e W __vector_4
0000074e W __vector_5
0000074e W __vector_6
0000074e W __vector_7
0000074e W __vector_8
00000752 T GetActiveParamSetNumber
00000760 T WriteParameterSet
0000077c t .28_start
00000788 t .28_finished
00000794 T ReadParameterSet
000007b0 t .49_start
000007bc t .49_finished
000007be T main
00000b2c T __vector_22
00000b98 T __vector_20
00000d3c T AddCRC
00000d98 T SendOutData
00000e64 T Decode64
00000f14 T uart_putchar
00000f36 T WriteProgramData
00000f38 T UART_Init
00000f6e T DatenUebertragung
0000104a T BearbeiteRxDaten
000010ff W __stack
00001186 T Putchar
000011b8 T PAD_0
000011ce T PAD_SP
000011e4 T PRINTP
00001210 T PRINT
00001238 T _printf_P
0000172a T Timer_Init
00001764 T SetDelay
00001776 T CheckDelay
0000178e T __vector_9
000018d4 T __vector_18
00001996 T Delay_ms
000019ba T ADC_Init
000019c6 T __vector_24
00001ff2 T SucheLuftruckOffset
0000207a T LcdClear
0000208c T Menu
000028c2 T __vector_19
0000295e T heading_MM3
00002c2a T timer0_MM3
00002c8e T calib_MM3
00002e1a T init_MM3
00002e42 T atan2_i
00002f7e T pgm_read_float
00002f92 T sin_f
00003052 T cos_f
00003062 T i2c_init
0000306e T i2c_start
00003076 T i2c_stop
0000307e T i2c_write_byte
0000308a T i2c_receive_byte
00003092 T i2c_receive_last_byte
0000309a T __vector_26
00003196 T rc_sum_init
000031c0 T __vector_12
000032fe T Mittelwert
000037bc T CalibrierMittelwert
00003af4 T ParameterZuordnung
00003f8e T DefaultKonstanten2
00004068 T DefaultKonstanten1
0000414a T SendMotorData
000041d8 T SetNeutral
0000437c T calib_acc
00004444 T Piep
0000446e T MotorRegler
00005888 T GPS_Neutral
000058ca T GPS_BerechneZielrichtung
000058dc T memchr
000058f6 T __subsf3
000058f8 T __addsf3
00005900 T __addsf3x
0000597c T __divsf3
00005982 T __divsf3x
00005a08 T __fixsfsi
00005a08 T __fixunssfsi
00005a2e T __fp_lneg
00005a3e T __floatunssisf
00005a42 T __floatsisf
00005a56 T __eqsf2
00005a56 T __lesf2
00005a56 T __ltsf2
00005a56 T __nesf2
00005a5c T __gesf2
00005a5c T __gtsf2
00005a62 T __cmpsf2
00005a74 t .fp_cmp
00005aa4 T __fp_merge
00005ad4 T __fp_nan
00005ad4 T __fp_nanEDOM
00005ad4 T __fp_nanERANGE
00005ad4 T __fp_nanx
00005ada T __fp_split3
00005ae0 T __fp_split2
00005af2 T __fp_split1
00005b0e T __fp_split_a
00005b2c T __fp_zero
00005b32 T __fp_zerox
00005b36 T __mulsf3
00005b3c T __mulsf3x
00005bc6 T __mulsi3
00005c04 T __udivmodhi4
00005c0c t __udivmodhi4_loop
00005c1a t __udivmodhi4_ep
00005c2c T __divmodhi4
00005c2c T _div
00005c40 t __divmodhi4_neg2
00005c46 t __divmodhi4_exit
00005c48 t __divmodhi4_neg1
00005c52 T __udivmodsi4
00005c5e t __udivmodsi4_loop
00005c78 t __udivmodsi4_ep
00005c96 T __divmodsi4
00005caa t __divmodsi4_neg2
00005cb8 t __divmodsi4_exit
00005cba t __divmodsi4_neg1
00005ccc T __prologue_saves__
00005d04 T __epilogue_restores__
00005d3a T __tablejump2__
00005d3e T __tablejump__
00005d46 T __eeprom_read_byte_1F2021
00005d56 T __eeprom_read_block_1F2021
00005d60 T __eeprom_write_byte_1F2021
00005d78 T __eeprom_write_block_1F2021
00005d82 t __stop_program
00005d82 T _exit
00005d82 W exit
00005d84 A __data_load_start
00005d84 T _etext
00005e10 A __data_load_end
00800100 D __data_start
00800100 D UebertragungAbgeschlossen
00800101 D PcZugriff
00800102 d timer.2047
00800103 d cnt_1ms.1978
00800104 D UBat
00800106 D Luftdruck
0080010a D MessLuftdruck
0080010c D Array
00800116 D DisplayBuff
00800166 d MaxMenue.1976
00800167 D NewPpmData
00800178 D Kp
0080017c D Ki
00800180 D Parameter_Luftdruck_D
00800181 D Parameter_MaxHoehe
00800182 D Parameter_Hoehe_P
00800183 D Parameter_Hoehe_ACC_Wirkung
00800184 D Parameter_KompassWirkung
00800185 D Parameter_Gyro_P
00800186 D Parameter_Gyro_I
00800187 D Parameter_Gier_P
00800188 D Parameter_I_Faktor
00800189 D Parameter_ServoNickControl
0080018a d NeueKompassRichtungMerken.2346
0080018c B __bss_start
0080018c D __data_end
0080018c D _edata
0080018c B DebugGetAnforderung
0080018d B DebugDisplayAnforderung
0080018e B DebugDataAnforderung
0080018f B GetVersionAnforderung
00800190 B SioTmp
00800191 B NeuerDatensatzEmpfangen
00800192 B NeueKoordinateEmpfangen
00800193 B CntCrcError
00800194 B AnzahlEmpfangsBytes
00800195 B PC_DebugTimeout
00800196 B MotorTest
0080019a b dis_zeile.2240
0080019b b UartState.2003
0080019c b buf_ptr.2002
0080019d b crc2.2001
0080019e b crc1.2000
0080019f b crc.1999
008001a1 b ptr.1986
008001a3 B CountMilliseconds
008001a5 B UpdateMotor
008001a6 B beeptime
008001a8 B ServoValue
008001aa b cnt.1979
008001ab B AccumulateNick
008001ad B AccumulateRoll
008001af B AccumulateGier
008001b1 B accumulate_AccRoll
008001b3 B accumulate_AccNick
008001b5 B accumulate_AccHoch
008001b7 B MessanzahlNick
008001b8 B MessanzahlRoll
008001b9 B MessanzahlGier
008001ba B messanzahl_AccNick
008001bb B messanzahl_AccRoll
008001bc B messanzahl_AccHoch
008001bd B HoeheD
008001bf B ZaehlMessungen
008001c1 b state.2015
008001c2 b kanal.2014
008001c3 B TestInt
008001c5 B DispPtr
008001c6 B RemoteTasten
008001c7 b MenuePunkt.1977
008001c8 b tmp.1997
008001c9 B twi_state
008001ca B motor
008001cb b motorread.1994
008001cc b index.1977
008001ce b AltICR.1975
008001d0 B Timeout
008001d1 B AdNeutralNick
008001d3 B AdNeutralRoll
008001d5 B AdNeutralGier
008001d7 B IntegralNick
008001db B IntegralNick2
008001df B IntegralRoll
008001e3 B IntegralRoll2
008001e7 B Integral_Gier
008001eb B Mess_IntegralNick
008001ef B Mess_IntegralNick2
008001f3 B Mess_IntegralRoll
008001f7 B Mess_IntegralRoll2
008001fb B Mess_Integral_Gier
008001ff B Mess_Integral_Gier2
00800203 B Mess_Integral_Hoch
00800207 B KompassValue
00800209 B KompassStartwert
0080020b B KompassRichtung
0080020d B updKompass
0080020e B Notlandung
0080020f B HoehenReglerAktiv
00800210 B Poti1
00800212 B Poti2
00800214 B Poti3
00800216 B Poti4
00800218 B SenderOkay
00800219 B StickNick
0080021b B StickRoll
0080021d B StickGier
0080021f B MotorenEin
00800220 B HoehenWert
00800222 B SollHoehe
00800224 B Parameter_UserParam1
00800225 B Parameter_UserParam2
00800226 B Parameter_UserParam3
00800227 B Parameter_UserParam4
00800228 b TimerWerteausgabe.2345
00800229 b hoehenregler.2344
0080022b b modell_fliegt.2343
0080022d b delay_ausschalten.2342
0080022e b delay_einschalten.2341
0080022f b delay_neutral.2340
00800230 b RcLostTimer.2339
00800232 b IntegralFehlerRoll.2338
00800234 b IntegralFehlerNick.2337
00800236 b tmp_long2.2336
0080023a b tmp_long.2335
0080023e b sollGier.2334
00800242 b SummeRoll.2333
00800246 b SummeNick.2332
0080024a B GPS_Nick
0080024c B GPS_Roll
0080024e B GpsAktuell_X
00800252 B GpsAktuell_Y
00800256 B GpsZiel_X
0080025a B GpsZiel_Y
0080025e B DiffRoll
00800260 B Motor_Vorne
00800261 B Motor_Hinten
00800262 B DiffNick
00800264 B Motor_Rechts
00800265 B Motor_Links
00800266 B s
00800267 B h
00800268 B m
00800269 B MotorWert
0080026e B MeineSlaveAdresse
0080026f B SendeBuffer
00800305 B NMEABuffer
0080039b B Debug_Timer
0080039d B DebugIn
008003a8 B VersionInfo
008003b2 B RxdBuffer
00800448 B DebugOut
0080047a B PrintZiel
0080047b B Aktuell_ay
0080047d B Aktuell_az
0080047f B StartLuftdruck
00800481 B Aktuell_Nick
00800483 B messanzahl_Druck
00800484 B Aktuell_Roll
00800486 B Aktuell_ax
00800488 B DruckOffsetSetting
00800489 B Aktuell_Gier
0080048b B tmpLuftdruck
0080048d B MM3_calib
00800496 B MM3
008004a0 B motor_rx
008004a8 B PPM_in
008004be B PPM_diff
008004d4 B EE_Parameter
0080050e B MesswertRoll
00800510 B MesswertNick
00800512 B MIN_GAS
00800513 B Mittelwert_AccHoch
00800515 B IntegralFaktor
00800519 B acc_neutral
00800521 B Mittelwert_AccNick
00800523 B MAX_GAS
00800524 B MesswertGier
00800526 B GyroFaktor
0080052a B Mittelwert_AccRoll
0080052c B __bss_end
0080052c A _end
00810000 D EEPromArray
0081000a D EEParameterArray
0081012c D ee_calib
00810135 D ee_acc_neutral
0081013d D __eeprom_end
/branches/v0.60_MicroMag3_Nick666/trunc/GPS.d
0,0 → 1,2
GPS.o GPS.d : GPS.c main.h old_macros.h _settings.h printf_P.h compass.h \
timer0.h uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h math.h
/branches/v0.60_MicroMag3_Nick666/trunc/analog.d
0,0 → 1,2
analog.o analog.d : analog.c main.h old_macros.h _settings.h printf_P.h compass.h \
timer0.h uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h math.h
/branches/v0.60_MicroMag3_Nick666/trunc/compass.d
0,0 → 1,2
compass.o compass.d : compass.c main.h old_macros.h _settings.h printf_P.h compass.h \
timer0.h uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h math.h
/branches/v0.60_MicroMag3_Nick666/trunc/fc.d
0,0 → 1,2
fc.o fc.d : fc.c main.h old_macros.h _settings.h printf_P.h compass.h timer0.h \
uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h math.h
/branches/v0.60_MicroMag3_Nick666/trunc/main.d
0,0 → 1,2
main.o main.d : main.c main.h old_macros.h _settings.h printf_P.h compass.h \
timer0.h uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h math.h
/branches/v0.60_MicroMag3_Nick666/trunc/math.d
0,0 → 1,2
math.o math.d : math.c main.h old_macros.h _settings.h printf_P.h compass.h \
timer0.h uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h math.h
/branches/v0.60_MicroMag3_Nick666/trunc/menu.d
0,0 → 1,2
menu.o menu.d : menu.c main.h old_macros.h _settings.h printf_P.h compass.h \
timer0.h uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h math.h
/branches/v0.60_MicroMag3_Nick666/trunc/printf_P.d
0,0 → 1,3
printf_P.o printf_P.d : printf_P.c main.h old_macros.h _settings.h printf_P.h \
compass.h timer0.h uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h \
math.h
/branches/v0.60_MicroMag3_Nick666/trunc/rc.d
0,0 → 1,2
rc.o rc.d : rc.c rc.h main.h old_macros.h _settings.h printf_P.h compass.h \
timer0.h uart.h analog.h twimaster.h menu.h fc.h gps.h math.h
/branches/v0.60_MicroMag3_Nick666/trunc/timer0.d
0,0 → 1,2
timer0.o timer0.d : timer0.c main.h old_macros.h _settings.h printf_P.h compass.h \
timer0.h uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h math.h
/branches/v0.60_MicroMag3_Nick666/trunc/twimaster.d
0,0 → 1,3
twimaster.o twimaster.d : twimaster.c main.h old_macros.h _settings.h printf_P.h \
compass.h timer0.h uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h \
math.h
/branches/v0.60_MicroMag3_Nick666/trunc/uart.d
0,0 → 1,2
uart.o uart.d : uart.c main.h old_macros.h _settings.h printf_P.h compass.h \
timer0.h uart.h analog.h twimaster.h menu.h rc.h fc.h gps.h math.h
/branches/v0.60_MicroMag3_Nick666/v0.60/COPYING
0,0 → 1,674
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
 
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
 
Preamble
 
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
 
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
 
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
 
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
 
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
 
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
 
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
 
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
 
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
 
The precise terms and conditions for copying, distribution and
modification follow.
 
TERMS AND CONDITIONS
 
0. Definitions.
 
"This License" refers to version 3 of the GNU General Public License.
 
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
 
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
 
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
 
A "covered work" means either the unmodified Program or a work based
on the Program.
 
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
 
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
 
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
 
1. Source Code.
 
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
 
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
 
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
 
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
 
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
 
The Corresponding Source for a work in source code form is that
same work.
 
2. Basic Permissions.
 
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
 
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
 
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
 
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
 
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
 
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
 
4. Conveying Verbatim Copies.
 
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
 
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
 
5. Conveying Modified Source Versions.
 
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
 
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
 
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
 
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
 
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
 
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
 
6. Conveying Non-Source Forms.
 
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
 
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
 
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
 
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
 
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
 
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
 
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
 
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
 
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
 
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
 
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
 
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
 
7. Additional Terms.
 
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
 
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
 
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
 
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
 
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
 
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
 
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
 
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
 
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
 
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
 
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
 
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
 
8. Termination.
 
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
 
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
 
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
 
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
 
9. Acceptance Not Required for Having Copies.
 
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
 
10. Automatic Licensing of Downstream Recipients.
 
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
 
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
 
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
 
11. Patents.
 
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
 
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
 
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
 
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
 
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
 
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
 
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
 
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
 
12. No Surrender of Others' Freedom.
 
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
 
13. Use with the GNU Affero General Public License.
 
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
 
14. Revised Versions of this License.
 
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
 
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
 
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
 
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
 
15. Disclaimer of Warranty.
 
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
 
16. Limitation of Liability.
 
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
 
17. Interpretation of Sections 15 and 16.
 
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
 
END OF TERMS AND CONDITIONS
 
How to Apply These Terms to Your New Programs
 
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
 
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
 
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
 
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
 
Also add information on how to contact you by electronic and paper mail.
 
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
 
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
 
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
 
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
 
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
/branches/v0.60_MicroMag3_Nick666/v0.60/COPYING.LESSER
0,0 → 1,165
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
 
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
 
 
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
 
0. Additional Definitions.
 
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
 
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
 
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
 
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
 
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
 
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
 
1. Exception to Section 3 of the GNU GPL.
 
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
 
2. Conveying Modified Versions.
 
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
 
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
 
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
 
3. Object Code Incorporating Material from Library Header Files.
 
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
 
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
 
b) Accompany the object code with a copy of the GNU GPL and this license
document.
 
4. Combined Works.
 
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
 
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
 
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
 
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
 
d) Do one of the following:
 
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
 
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
 
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
 
5. Combined Libraries.
 
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
 
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
 
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
 
6. Revised Versions of the GNU Lesser General Public License.
 
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
 
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
 
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
/branches/v0.60_MicroMag3_Nick666/v0.60/Flight-Ctrl_MEGA644_V0_60_MM3.hex
0,0 → 1,1522
:100000000C9492030C94AF030C94AF030C94AF03C5
:100010000C94AF030C94AF030C94AF030C94AF0398
:100020000C94AF030C94B20B0C94AF030C94AF037D
:100030000C9407190C94AF030C94AF030C94AF030A
:100040000C94AF030C94AF030C94590C0C947614DD
:100050000C94D4050C94AF030C949E050C94AF0340
:100060000C94F80C0C94AF030C9460180C94AF0330
:100070004B08C508C508C5087D085E08C508C50841
:10008000C508A908A908A908A908A9088108C508D8
:10009000C5087008C5087908210D730DCC0D270E11
:1000A000440E670E8D0E740FB310E71048119E11A9
:1000B000EC116512BF12201344137A13B613F41314
:1000C0002D1479187E189A18A818AD18B818C018E9
:1000D000D4180A0A0D004E65757472616C0048658B
:1000E0006164696E67486F6C64000A0D53746575CE
:1000F0006572756E673A20004F4B0A0D000A0D417C
:1001000062676C65696368204C75667464727563B8
:100110006B73656E736F722E2E000A0D4B616C69E6
:10012000627269657265204E65757472616C6C618E
:100130006765000A0D4B616C6962726965726520C2
:100140004B6F6D70617373000A0D42656E75747A42
:100150006520506172616D657465727361747A2097
:100160002564000A0D496E69742E20454550524F92
:100170004D3A2047656E6572696572652044656613
:1001800061756C742D506172616D657465722E2E8F
:100190002E000A0D3D3D3D3D3D3D3D3D3D3D3D3D3E
:1001A0003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D7F
:1001B0003D3D000A0D466C69676874436F6E74724A
:1001C0006F6C205625642E256420002E005A5F5245
:1001D000616E67653A202025346900595F52616E6F
:1001E00067653A202025346900585F52616E676563
:1001F0003A2020253469004D4D332052616E6765E9
:10020000005A5F4F66667365743A20202533690093
:10021000595F4F66667365743A202025336900582C
:100220005F4F66667365743A2020253369004D4D33
:1002300033204F66660052616E67653A2533692D3B
:10024000253369005374656C6C756E673A202533ED
:100250006900536574706F696E74202025336900DE
:10026000536572766F202000506F7469343A2020F5
:1002700025336900506F7469333A202025336900B3
:10028000506F7469323A202025336900506F7469C9
:10029000313A20202533690053746172743A20206A
:1002A000202020253569004D657373776572743A97
:1002B0002020253569005269636874756E673A209D
:1002C00020253569004B6F6D7061737320202020ED
:1002D00020202000456D70662E506567656C3A25BC
:1002E0003569005370616E6E756E673A2020253552
:1002F0006900486F636820253469202825336929FF
:1003000000526F6C6C202534692028253369290040
:100310004E69636B20253469202825336929004103
:100320004343202D2053656E736F720047696572D9
:100330002025346920282533692900526F6C6C20F0
:10034000253469202825336929004E69636B2025EF
:100350003469202825336929004779726F202D20C0
:1003600053656E736F720050333A25346920204B09
:10037000616EE46C65200050313A253469202050CC
:10038000323A253469200047733A253469202047E2
:10039000693A25346920004E693A25346920205293
:1003A0006F3A25346920004B373A25346920204BB9
:1003B000616EE46C6520004B353A25346920204B92
:1003C000363A25346920004B333A25346920204BD6
:1003D000343A25346920004B313A25346920204BCA
:1003E000323A25346920004B6F6D706173733A2087
:1003F000202025356900526F6C6C3A202020202087
:1004000020253569004E69636B3A2020202020208A
:1004100025356900616B742E204C6167650048F6D4
:1004200068656E726567656C756E67004B65696EB1
:100430006520004F66662020202020203A202535A8
:1004400069004C756674647275636B3A2025356972
:1004500000536F6C6C486F6568653A2025356900FC
:10046000486F6568653A20202020202535690028DE
:10047000632920486F6C676572204275737300535F
:10048000657474696E673A20256420005625642ED1
:100490002564002B2B204D696B726F4B6F70746558
:1004A00072202B2B005B25695D000001020305060D
:1004B0000708090A0B0C0D0F10111213141516174B
:1004C00018191A1B1B1C1D1E1F2021212223242545
:1004D000252627272829292A2B2B2C2C2D2E2E2F79
:1004E0002F303031313232333334343435353636DF
:1004F0003637373838383939393A3A3A3B3B3B3C6A
:100500003C3C3C3D3D3D3D3E3E3E3E3F3F3F3F400F
:1005100040404041414141414242424242434343C3
:100520004343434444444444444545454545454587
:100530004646464646464646474747474747474753
:100540004848484848484848484949494949494924
:100550004949494A4A4A4A4A4A4A4A4A4A4A4A4BFD
:100560004B4B4B4B4B4B4B4B4B4B4B4B4C4C4C4CD7
:100570004C4C4C4C4C4C4C4C4C4C4C4D4D4D4D4DB6
:100580004D4D4D4D4D4D4D4D4D4D4D4D4E4E4E4E97
:100590004E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E7B
:1005A0004F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5B
:1005B0004F4F4F4F4F4F4F4F0000000056F88E3CAB
:1005C000C7F20E3D465E563D7FDC8E3DB07EB23DAD
:1005D0000A13D63D9D96F93D65830E3E5E30203E62
:1005E000D5D0313E6F63433ECEE6543E8E59663ED3
:1005F00060BA773EED83843E55208D3EBEB1953E78
:100600007A379E3EDDB0A63E421DAF3EFF7BB73E31
:1006100070CCBF3EE80DC83EC83FD03E6A61D83EB0
:100620002D72E03E7171E83E925EF03EF738F83E82
:100630000000003F89D9033FCBA8073F766D0B3FF1
:1006400044270F3FE7D5123F1779163F8C101A3F0A
:10065000FE9B1D3F241B213FBA8D243F7CF3273F87
:10066000254C2B3F71972E3F22D5313FF404353F67
:10067000A726383FFF393B3FBD3E3E3FA634413FB2
:100680007C1B443F09F3463F12BB493F60734C3F1C
:10069000BD1B4F3FF2B3513FCF3B543F1EB3563FBC
:1006A000AE19593F516F5B3FD7B35D3F14E75F3FD2
:1006B000DB08623F0119643F5D17663FCA03683F6C
:1006C0001DDE693F34A66B3FEB5B6D3F20FF6E3F45
:1006D000B28F703F820D723F7078733F63D0743F6A
:1006E0003F15763FEA46773F4D65783F5270793F38
:1006F000E2677A3FEC4B7B3F5C1C7C3F24D97C3F1C
:1007000036827D3F80177E3FFD987E3F9E067F3F6D
:100710005B607F3F2FA67F3F13D87F3F05F67F3F6B
:100720000000803F11241FBECFEFD0E1DEBFCDBF60
:1007300011E0A0E0B1E0ECE7FEE502C005900D920B
:10074000AC38B107D9F715E0ACE8B1E001C01D92B3
:10075000A233B107E1F70E94E7030C943D2F0C94FC
:100760000000A2E0B0E00E941F2F802D992708957D
:10077000FB01863008F085E0282F2150842F99272F
:10078000AAE32A9FD0011124A65FBF4F019724F04E
:1007900001900E942C2FFACFA2E0B0E0022E0E941E
:1007A0002C2F0895FB01282F863008F025E0842F98
:1007B00099272150AAE32A9FD0011124A65FBF4F99
:1007C000019724F00E941F2F0192FACF08950F93F2
:1007D0001F93CF93DF9381E087B98FEF88B98BE1C7
:1007E00084B9289A8EE38AB9579A87EF8BB984B770
:1007F000877F84BF80916000886180936000109241
:10080000600088EE93E09093A7018093A601109278
:100810002202109221021092B3041092B20410929C
:10082000200210921F0210921E0210921D022898A0
:100830000E94BA0C0E94A4070E94F2180E94F20CB7
:100840000E9446180E94221778941092AE038CE3FF
:100850008093AF0384E08093B0038CE390E09F9398
:100860008F931F921F9283EB91E09F938F931F9220
:100870000E94240982E991E09F938F931F920E9426
:100880002409299AA1E0B0E00E941F2F802D2DB7E6
:100890003EB7265F3F4F2DBF8A30B9F183E691E026
:1008A0009F938F931F920E9424090E945B204AE32A
:1008B0006AED74E080E00E94B80301E00F900F90B1
:1008C0000F90023049F40E94EE1F4AE36AED74E093
:1008D00082E00E94B80303E04AE36AED74E0802FEF
:1008E0000E94B8030F5F063060F381E022E030E041
:1008F000D901082E0E942C2F8AE021503040D901C6
:10090000082E0E942C2F0E94E52102E010E0D80161
:100910000E941F2F802D4AE36AED74E00E94D203EB
:10092000D8010E941F2F802D99279F938F9388E4D1
:1009300091E09F938F931F920E94240984EF91E08E
:100940000E949D0BEC010F900F900F900F900F9055
:10095000CE010E94A60B8823D9F3E091DC04FF2787
:10096000EE0FFF1FE255FB4F808191818536910587
:10097000C4F0E091DD04FF27EE0FFF1FE255FB4FAF
:10098000808191818536910564F083E391E09F93A6
:100990008F931F920E9424090E945C160F900F9063
:1009A0000F90E091DC04FF27EE0FFF1FE255FB4F95
:1009B0008081918185369105C4F0E091DD04FF27A7
:1009C000EE0FFF1FE255FB4F808191818C599F4FA5
:1009D00064F48AE191E09F938F931F920E9424090F
:1009E0000E94E5210F900F900F908091E20480FF0C
:1009F00020C08DEF90E09F938F931F920E94240957
:100A000084EC99E00E949D0BEC010E940E100F9067
:100A10000F900F90CE010E94A60B8823D9F388EF88
:100A200090E09F938F931F920E9424090F900F9044
:100A30000F900E941321289880ED97E09093A701D2
:100A40008093A60188EE93E09093A9038093A80376
:100A500085E58093A3038AEE90E09F938F931F9286
:100A60000E9424098091E2040F900F900F9082FF62
:100A700003C08EED90E002C086ED90E09F938F93CF
:100A80001F920E9424090F900F900F9082ED90E02A
:100A90009F938F931F920E9424090E9452100F90DF
:100AA0000F900F908091A501882379F11092A501F4
:100AB0000E945E220E94CC20289880910101882308
:100AC00019F081508093010180911C02882329F044
:100AD00080911C02815080931C022091040130916E
:100AE00005018091F20499272817390734F480ED25
:100AF00097E09093A7018093A6018091D20188236B
:100B000019F40E94461801C028980E94BF070E944D
:100B10002D0880E090E00E94A60B882319F28091B6
:100B20002302882329F088B190E1892788B901C080
:100B3000449884EF91E00E949D0BB4CF1F920F92D6
:100B40000FB60F9211248F939F93EF93FF93809191
:100B500000018823E1F48091A1019091A201019606
:100B60009093A2018093A101FC01EB58FD4FE0811D
:100B7000ED3019F08639910539F41092A2011092E6
:100B8000A10181E080930001E093C60004C01092AF
:100B9000A2011092A101FF91EF919F918F910F906F
:100BA0000FBE0F901F9018951F920F920FB60F92C5
:100BB00011242F933F934F938F939F93AF93BF93A2
:100BC000CF93DF93EF93FF938091C60080939001C2
:100BD00040919C01463910F010929B018091900148
:100BE0008D3009F05CC080919B01823009F057C0C4
:100BF00010929B01A42FBB27FD01EA54FC4F3081CA
:100C0000ED01C954DC4F288180919F019091A00192
:100C1000831B9109821B91099F709093A00180937F
:100C20009F019C0196E0369527959A95E1F7235C04
:100C300020939E01982F9F73935C90939D018081D8
:100C4000281729F48881981711F491E006C0809143
:100C500093018F5F8093930190E0809191018823AD
:100C600009F064C0992309F461C081E08093910187
:100C700040939401A854BC4F8DE08C938091BA03AB
:100C8000823509F053C088E190E02CE00FB6F8946B
:100C9000A895809360000FBE2093600047C08091AC
:100CA0009B018130D9F0813018F08230E9F530C0F5
:100CB00080919001833239F480919101882319F455
:100CC00081E080939B01809190018093B80381E043
:100CD00080939C0180919001992715C082E08093B8
:100CE0009B01E42FFF2780919001E854FC4F808303
:100CF0004F5F40939C012091900180919F019091C2
:100D0000A001820F911D9093A00180939F010EC0BE
:100D1000E42FFF2780919001E854FC4F80834639EF
:100D200038F310929B01E7CF10929B01FF91EF9156
:100D3000DF91CF91BF91AF919F918F914F913F9153
:100D40002F910F900FBE0F901F901895DC0120E09F
:100D500030E040E050E0E5E7F2E005C08191280F87
:100D6000311D4F5F5F4F4A175B07C1F73F70C901E5
:100D700036E0969587953A95E1F7835CFD01EB584F
:100D8000FD4F808311962F73235CFD01EB58FD4FBF
:100D90002083AA58BD4F8DE08C9310920001809162
:100DA00075028093C6000895EF92FF920F931F93F0
:100DB000CF93DF937A01722F93E290937502609341
:100DC00076028093770203E010E060E0A8E7B2E0EB
:100DD00046C0F701E60FF11D90816F5F715019F465
:100DE000E0E040E00FC0F701E60FF11D40816F5FCA
:100DF000715011F4E0E006C0F701E60FF11DE0814B
:100E00006F5F7150892F86958695835C8C935527EB
:100E1000892F99278370907024E0880F991F2A9555
:100E2000E1F79A0194E0369527959A95E1F7822BA0
:100E3000835CED0189834F705070440F551F440F40
:100E4000551F8E2F8295869586958370842B835CA3
:100E50008A83EF73E35CEB830C5F1F4F1496772359
:100E600009F0B7CFC8010E94A606E6E0CDB7DEB70D
:100E70000C940A2F1F93CF93DF93EC0170E0A22F05
:100E8000BB27129748C0E42FFF27E854FC4F30815E
:100E90004F5FE42FFF27E854FC4F50814F5FE42F52
:100EA000FF27E854FC4F10814F5FE42FFF27E854E1
:100EB000FC4F20814F5F842F9927A817B90774F141
:100EC0005D53FE01E70FF11D3D53330F330F852FA7
:100ED00082958F70382B3083613001F1912F9D53B3
:100EE0007F5FFE01E70FF11D71505295507F892FF2
:100EF00086958695582B508363506F3F79F07E5FBF
:100F0000FE01E70FF11D9295990F990F907C2D53DB
:100F1000922B90837F5F662309F0B5CFDF91CF914D
:100F20001F9108951F93182F8A3019F48DE00E94A5
:100F300092078091C00085FFFCCF1093C60080E02F
:100F400090E01F9108950895E1ECF0E088E180833E
:100F5000A0ECB0E08C9182608C938081806880836B
:100F60008081806480838AE28093C40088EC90E072
:100F70000E949D0B9093A2038093A10308958091FA
:100F80000001882309F468C080918C01882371F0E6
:100F900080910001882351F02BE043EA53E06091F7
:100FA000740287E40E94D40610928C018091A10300
:100FB0009091A2030E94A60B882321F480918E01B8
:100FC0008823B1F080910001882391F022E34EE460
:100FD00054E06091740284E40E94D40610928E0161
:100FE0008AEF90E00E949D0B9093A2038093A1034F
:100FF00080918D018823F1F0809100018823D1F048
:101000000E945B1010928D0180919A018F5F8093F6
:101010009A01843011F410929A0180919A0144E16E
:10102000849FA00111244A5E5E4F24E160E0805D50
:101030000E94D40680918F01882371F08091000175
:10104000882351F02AE04EEA53E06091740286E56D
:101050000E94D40610928F010895A2E0B0E0E3E36D
:10106000F8E00C94F12E80919101882309F48FC04F
:101070008FEF809301018091BA039927AA27BB279C
:10108000FC01E356F040E431F10508F07EC0E85C75
:10109000FF4F0C94192F2091940143E06BE083EAF9
:1010A00093E00E943A078091C8019091A503892B93
:1010B0008093C80181E080938E0167C020919401E4
:1010C00043E062E0CE0101960E943A078091C80198
:1010D0009981892B8093C80181E080938D0155C04F
:1010E0002091940143E064E086E991E00E943A0790
:1010F0004CC081E080938F0148C081E080938C01D7
:1011000044C02091940143E062E0CE0101960E9428
:101110003A0789818F3F89F0863010F085E0898316
:101120004AE36AED74E089810E94D20389812AE34F
:101130004AED54E06091740208C0109174020E945C
:10114000B1032AE34AED54E0612F855B0E94D40687
:101150001CC02091940143E06AE38AED94E00E9470
:101160003A078091BA034AE36AED74E08B560E9415
:10117000B8038091BA038B56A2E0B0E0082E0E941B
:101180002C2F0E94B1030E94492210929101E3E0AA
:10119000CE5F0C940D2F982F80918004813069F4DC
:1011A0008091C701E82FFF27EA5EFE4F90838F5F93
:1011B0008093C70121E030E005C0892F0E9492078B
:1011C000282F3327C90108951F93182F04C080E3E7
:1011D0000E94CB0811501116D4F31F9108951F934C
:1011E000182F04C080E20E94CB0811501116D4F3CE
:1011F0001F9108950F931F93CF93DF938C01EB0101
:1012000008C0F8010F5F1F4FE4918E2F0E94CB089A
:1012100021972097B1F7DF91CF911F910F910895FA
:101220000F931F93CF93DF938C01EB0106C0F8015E
:1012300081918F010E94CB0821972097C1F7DF9100
:10124000CF911F910F910895A3E3B0E0EAE2F9E096
:101250000C94E22E29968FAD299780938004CE01BD
:10126000855B9F4F9D838C832B968EAD9FAD2B9777
:101270009FA78EA722243324210102C01301240139
:101280000EA51FA502C00F5F1F4FF801F490FF20AD
:1012900019F0F5E2FF16B9F7B8018EA59FA5681BF6
:1012A000790B11F00E94FA08FF2009F442C20F5F87
:1012B0001F4F1FA70EA71982AC81BD811BAA1AAAB6
:1012C0009FEF99ABEEA5FFA5CF0101969FA78EA733
:1012D000B49095E7B91621F08B2D8062883789F498
:1012E000EBA9E0FF07C02D903D904D905C901397C7
:1012F000149607C08D919C9111971C01442455248C
:101300001296F0E2BF1621F489818823D9F685C0B0
:1013100083E2B81609F483C09AE2B91621F0EDE22F
:10132000BE1669F408C0FD011296E081EAABE7FF42
:10133000C9CFE195EAABFBA9F061FF7D72C08BE2FA
:10134000B81609F46AC09EE2B916B1F52EA53FA5FC
:101350002F5F3F4FEEA5FFA584918A3221F0B82E72
:1013600020E030E01BC0FD0112964081518157FF03
:1013700002C04FEF5FEF49AB3FA72EA7A3CFC90134
:1013800003E0880F991F0A95E1F7220F331F280FFA
:10139000391F2B0D311D20533040B49031968B2DC9
:1013A00080538A3060F3FFA7EEA7A90137FF02C080
:1013B0004FEF5FEF49AB8DCFF0E3BF1631F48BA950
:1013C00084FD80CF80628BAB7DCF8B2D81538930A4
:1013D000E8F420E030E0C901F3E0880F991FFA95A6
:1013E000E1F7220F331F280F391F2B0D311D20531A
:1013F0003040EEA5FFA5CF0101969FA78EA7B49020
:101400008B2D80538A3038F32AAB63CF98E6B91618
:1014100051F4EBA9E460EBAB55CFB98253CFFBA9F4
:10142000F860FBAB4FCF8CE6B81621F49BA9916016
:101430009BAB48CFBD83AC83E3E6BE1639F412966E
:10144000BD83AC8312978C918E8318C1F4E4BF16D0
:1014500039F084E6B81639F099E6B91659F503C0A3
:10146000EBA9E160EBABFBA9F0FF08C01496BD83CC
:10147000AC835E904E903E902E900AC01296BD8333
:10148000AC839E918E911C01442437FC4094542CD3
:1014900057FC03C08AE088AB92C0509440943094CB
:1014A0002094211C311C411C511C8DE289839AE03F
:1014B00098AB85C0EFE4BE1629F0FFE6BF1639F4FD
:1014C00088E061C09BA991609BABE8E056C0F0E763
:1014D000BF1671F41296BD83AC839E918E911C0150
:1014E000442455248BA980648BAB78E7B72E5EC06B
:1014F000E3E7BE16D9F51296BD83AC83DE90CE909D
:10150000C114D10489F488E28E838EE68F8385E747
:1015100088878CE689878A8789E28B871C8666E0C4
:10152000C62ED12CCC0EDD1EF9A9F7FD13C04F2F0E
:10153000552747FD509560E070E0C6010E94EA2CF7
:10154000009711F419A90DC08C1919A981174CF431
:10155000182F07C0F60101900020E9F731971E2FE0
:101560001C1919824201310140E094C085E5B8168A
:1015700031F095E7B91649F4EAE0E8AB1FC0FBA9E2
:10158000F160FBAB8AE088AB19C098E5B91621F091
:10159000E8E7BE1609F06EC0FBA9F3FD02C080E1CA
:1015A000F2CF211431044104510419F490E198ABB5
:1015B00005C0EBA9E064EBABF0E1F8AB198289A9B7
:1015C00087FD03C09BA99F7D9BAB2114310441047F
:1015D000510461F4E9A9EE2349F466247724430118
:1015E0005EE2C52ED12CCC0EDD1E3EC04EE2C42ED6
:1015F000D12CCC0EDD1EF8A9EF2EFF2400271127D9
:10160000C201B101A80197010E94A52E6A3020F401
:1016100030E3A32EA60E08C027E5A22EA60E88E56D
:10162000B81611F49FEDA922F601A2926F01C20132
:10163000B101A80197010E94A52E39014A012E147B
:101640003F044006510618F019012A01D9CFF8A924
:10165000F83051F48BA983FF07C090E3A91621F05D
:1016600080E3F60182936F01CE018C19182F125D71
:1016700049A910C0BB2009F45CC0BE821982420196
:10168000310100E096E0C92ED12CCC0EDD1E11E018
:1016900021E005C0212F042F011B07FD00E08981F7
:1016A000882319F0812F8F5F07C09BA996FD02C088
:1016B000812F02C0822F8E5FA82EA00EEBA9EE2EE6
:1016C000FF2480E3482E512C4E205F20411451040A
:1016D00021F48AA98A190E94EF088981882329F0B8
:1016E00061E070E0CE01019609C0E6FE09C080E32A
:1016F0008A83BB8262E070E0CE0102960E941009EC
:10170000F0E24F16510421F48AA98A190E94E408D4
:10171000802F0E94E408612F772767FD7095C6012E
:101720000E941009E4FEAACD8AA98A190E94EF0836
:10173000A5CDE2E1CD5C0C94FE2E2091A301309169
:10174000A4012F5F3F4F820F931F08952091A301A3
:101750003091A401821B930B892F99278695807461
:10176000992708951F920F920FB60F921124EF92AE
:10177000FF920F931F932F933F934F935F936F931A
:101780007F938F939F93AF93BF93CF93DF93EF9309
:10179000FF93809102018150809302018F3F09F0F5
:1017A0006DC083E88093B00080918901C82FDD2748
:1017B000D093A901C093A80180910005E090FC049A
:1017C00080FF1EC06091DB017091DC018091DD0122
:1017D0009091DE01FF240027112720E830E040E04F
:1017E00050E00E94C72EC801B7010E945F2E20E082
:1017F00032E040E050E00E94C72EC20FD31F1DC050
:101800006091DB017091DC018091DD019091DE013E
:10181000FF240027112720E830E040E050E00E943C
:10182000C72EC801B7010E945F2E20E032E040E0E1
:1018300050E00E94C72EC21BD30BD093A901C093C6
:10184000A8012091A8013091A9018091FD04992758
:101850002817390734F08091FE04992782179307DF
:1018600024F49093A9018093A8018091A80180930A
:10187000B3008091FF048093020104C083E0809351
:10188000B0005F98FF91EF91DF91CF91BF91AF9141
:101890009F918F917F916F915F914F913F912F9188
:1018A0001F910F91FF90EF900F900FBE0F901F9020
:1018B00018951F920F920FB60F9211242F933F93FA
:1018C0004F935F936F937F938F939F93AF93BF9348
:1018D000EF93FF938091AA0181508093AA018F3FDB
:1018E00001F58AE08093AA01809103018F5F8170E6
:1018F00080930301882319F481E08093A5018091EE
:10190000A3019091A40101969093A4018093A30157
:101910008091D201882329F08091D2018150809357
:10192000D2018091A6019091A701029758F0809171
:10193000A6019091A70101979093A7018093A6011A
:101940005A9A01C05A988091E20483FF02C00E9413
:101950002A16FF91EF91BF91AF919F918F917F9147
:101960006F915F914F913F912F910F900FBE0F900C
:101970001F9018958091A3019091A4010B969093CC
:10198000AC018093AB0182E085BD83EA84BD17BCC6
:1019900088E788BD83EC8093B00086E08093B10037
:1019A000E0E7F0E0808182608083EEE6F0E0808115
:1019B000816080838AE08093B3001092B200089522
:1019C0002091A3013091A4012F5F3F4F280F391FB1
:1019D0008091A3019091A401A901481B590B57FFC5
:1019E000F7CF089510927C008FEC80937A000895D1
:1019F0001F920F920FB60F921124EF92FF920F9346
:101A00001F932F933F934F935F936F937F938F9386
:101A10009F93AF93BF93CF93DF93EF93FF93109276
:101A20007A008091C3018F5F8093C3018150E82FBA
:101A3000FF27E830F10508F0CFC2E45BFF4F0C94BC
:101A4000192F2091D7013091D80180917800909181
:101A50007900281B390B8091B1019091B201820F5E
:101A6000931F9093B2018093B1018091BB018F5F6E
:101A70008093BB018091FF0190910002A09101022F
:101A8000B0910202442737FD4095542F820F931FD7
:101A9000A41FB51F8093FF0190930002A093010241
:101AA000B09302028091030290910402A09105027A
:101AB000B0910602820F931FA41FB51F80930302EB
:101AC00090930402A0930502B093060281E08093F4
:101AD000C4018091C1019091C20101969093C2010D
:101AE0008093C1017DC260917800709179008091EE
:101AF000D5019091D601681B790B8091F7019091E7
:101B0000F801A091F901B091FA019B01442737FD3A
:101B10004095542F820F931FA41FB51F8093F70188
:101B20009093F801A093F901B093FA018091FB0121
:101B30009091FC01A091FD01B091FE01820F931FD5
:101B4000A41FB51F8093FB019093FC01A093FD019E
:101B5000B093FE0180917800909179000A9710F47B
:101B600064E47DEF8091780090917900895E9340E4
:101B700010F06CEB72E08091AF019091B001860F94
:101B8000971F9093B0018093AF018091BA018F5F4E
:101B90008093BA0182E058C060917800709179001A
:101BA0008091D3019091D401681B790B8091EF0152
:101BB0009091F001A091F101B091F2019B014427B5
:101BC00037FD4095542F820F931FA41FB51F80939C
:101BD000EF019093F001A093F101B093F201809195
:101BE000F3019091F401A091F501B091F601820FFB
:101BF000931FA41FB51F8093F3019093F401A0934A
:101C0000F501B093F60180917800909179000A97E0
:101C100010F464E47DEF8091780090917900895E02
:101C2000934010F06CEB72E08091AD019091AE01A9
:101C3000860F971F9093AE018093AD018091B901FB
:101C40008F5F8093B90184E08093C401C9C1409142
:101C500004015091050180917800909179009A01DA
:101C6000220F331F240F351F63E070E00E947E2E89
:101C7000260F371F36952795369527953093050102
:101C80002093040186E0E0CF809121059091220508
:101C90002091780030917900821B930B90938204FD
:101CA000809381048091B3019091B40120918104CB
:101CB00030918204820F931F9093B4018093B301FB
:101CC0008091BD018F5F8093BD0187E0BDCF809182
:101CD00078009091790020911F0530912005821B9A
:101CE000930B90938D0480938C048091B501909117
:101CF000B60120918C0430918D04820F931F909334
:101D0000B6018093B5018091BC018F5F8093BC01C7
:101D100085E08093C40186E0E4C060917800709112
:101D20007900E0902305F09024050091250510919D
:101D30002605882777FD8095982F0E949D2DA80164
:101D400097010E94F72C0E94802D7093B801609338
:101D5000B7012091B7013091B801E0918104F09171
:101D6000820480918C0490918D0497FF03C090951C
:101D700081959F4F64E070E00E94922EEB01CF01AD
:101D8000F7FF03C0909581959F4F64E070E00E943B
:101D9000922E260F371F2C0F3D1F3093B801209332
:101DA000B7018091B7019091B801029704F1609159
:101DB000230570912405809125059091260520E04A
:101DC00030E048E454E40E94A72D88230CF03CC086
:101DD0006091230570912405809125059091260539
:101DE0002AE037ED43EA5CE30E94F82C25C080919D
:101DF000B7019091B8018F5F9F4F34F56091230533
:101E000070912405809125059091260520E030E011
:101E100046E154E40E94AA2D1816B4F460912305FB
:101E20007091240580912505909126052AE037EDD3
:101E300043EA5CE30E94F72C60932305709324052A
:101E4000809325059093260581E08093BE018091C3
:101E5000780090917900909384048093830420917A
:101E60000702309108024091090250910A028091C4
:101E7000B7019091B801AA2797FDA095BA2F280F16
:101E8000391F4A1F5B1F20930702309308024093BB
:101E9000090250930A02E0900702F09008020091B4
:101EA000090210910A026091070270910802809164
:101EB000090290910A0220E034E040E050E00E94E4
:101EC000C72EE21AF30A040B150BE0920702F092F8
:101ED00008020093090210930A0283E08093C40170
:101EE00087E08093C3017CC080919104909192041B
:101EF0002091780030917900820F931F9093920483
:101F000080939104809189048F5F809389048091EC
:101F10008904853008F460C0809178009091790040
:101F200090930B0180930A0110928904809185049B
:101F3000909186042091910430919204821B930B1E
:101F40002091240230912502821B930B9093C001B3
:101F50008093BF016091910470919204E09006011A
:101F6000F09007010091080110910901882777FD81
:101F70008095982FA8019701220F331F441F551FEA
:101F80002E0D3F1D401F511F620F731F841F951F91
:101F900024E030E040E050E00E94C72E209306018C
:101FA0003093070140930801509309012091850463
:101FB000309186048091060190910701A09108015B
:101FC000B0910901281B390B30932502209324027C
:101FD00010929204109291041092C4011092C301C5
:101FE0008091C40180937C008FEC80937A00FF91F4
:101FF000EF91DF91CF91BF91AF919F918F917F91A1
:102000006F915F914F913F912F911F910F91FF9091
:10201000EF900F900FBE0F901F901895CF93DF9306
:10202000A3E0B0E00E941F2F802DC82FDD27C5310F
:10203000D10508F02A97C7BD84E690E00E94E00C25
:1020400080910A0190910B0182559340D0F4C0E039
:10205000D0E017C0C7BD82E390E00E94E00C8BEC9B
:1020600091E09F938F931F920E94240980910A010F
:1020700090910B010F900F900F908458934020F097
:102080002196CA3FD10530F3A3E0B0E00C2E0E94A8
:102090002C2FC0938E0488EC90E00E94E00CDF911E
:1020A000CF910895E6E1F1E080E2819391E0E63698
:1020B000F907D9F70895FF920F931F938091C801F4
:1020C000282F3327C90181709070682F882391F0E1
:1020D0008091C901882311F0815002C0809166016E
:1020E0008093C901E6E1F1E080E2819391E0E63678
:1020F000F907D9F7A9014270507021FF0DC08091F6
:10210000C9018F5F8093C901E6E1F1E080E281932C
:1021100091E0E636F907D9F7662321F0452B11F057
:102120001092C90181E18093C7018091C90199276B
:102130009F938F9385EA94E09F938F9381E08F9391
:102140000E9424098091C9010F900F900F900F9069
:102150000F90E82FFF27ED30F10508F0BCC3EC5AD3
:10216000FF4F0C94192F1092C70183E994E09F93BD
:102170008F9311E01F930E94240984E18093C7018B
:102180008CE390E09F938F931F921F928CE894E0D2
:102190009F938F931F930E94240988E28093C70125
:1021A0000E94B10399279F938F938FE794E09F93A9
:1021B0008F931F930E9424098CE38093C7018FE6BD
:1021C00094E09F938F931F930E94240980C3809172
:1021D000E20480FF44C01092C701809124029091D4
:1021E00025029F938F9380E694E09F938F9311E055
:1021F0001F930E94240984E18093C70180912602E5
:10220000909127029F938F9381E594E09F938F9302
:102210001F930E94240988E28093C70180910A01DC
:1022200090910B019F938F9382E494E09F938F93FF
:102230001F930E9424098CE38093C70180918E0430
:1022400099279F938F9383E394E09F938F931F939A
:102250000E9424098DB79EB744968DBF41C384E187
:102260008093C7018CE294E09F938F9311E01F93BA
:102270000E94240988E28093C7018EE194E09F9335
:102280008F931F930E9424098DB79EB70696E5CFC2
:102290001092C70184E194E09F938F9311E01F9304
:1022A0000E94240984E18093C7016091DB01709151
:1022B000DC018091DD019091DE0120E034E040E01E
:1022C00050E00E94C72E5F934F933F932F9385E07A
:1022D00094E09F938F931F930E94240988E2809338
:1022E000C7016091E3017091E4018091E501909153
:1022F000E60120E034E040E050E00E94C72E5F930A
:102300004F933F932F9386EF93E09F938F931F9369
:102310000E9424098CE38093C70180910B02909165
:102320000C029F938F9387EE93E09F938F931F935D
:102330000E9424098DB79EB746968FCF1092C70191
:102340008091B2049091B3042091B0043091B10413
:102350009F938F933F932F9387ED93E09F938F935A
:1023600011E01F930E94240984E18093C7018091AA
:10237000B6049091B7042091B4043091B5049F93B2
:102380008F933F932F9387EC93E09F938F931F93AB
:102390000E94240988E28093C7018091BA04909139
:1023A000BB042091B8043091B9049F938F933F935D
:1023B0002F9387EB93E09F938F931F930E942409A1
:1023C0008CE38093C7018091BC049091BD049F93DE
:1023D0008F9387EA93E070C01092C701E091DB040D
:1023E000FF27EE0FFF1FE255FB4F20813181E09167
:1023F000DA04FF27EE0FFF1FE255FB4F808191812A
:102400003F932F939F938F9387E993E09F938F93AD
:1024100011E01F930E94240984E18093C701E09199
:10242000DD04FF27EE0FFF1FE255FB4F20813181B6
:10243000E091DC04FF27EE0FFF1FE255FB4F808188
:1024400091813F932F939F938F9387E893E09F937E
:102450008F931F930E94240988E28093C701E09123
:10246000DF04FF27EE0FFF1FE255FB4F2081318174
:10247000E091DE04FF27EE0FFF1FE255FB4F808146
:1024800091813F932F939F938F9387E793E09F933F
:102490008F931F930E9424098CE38093C701E091DE
:1024A000E004FF27EE0FFF1FE255FB4F8081918173
:1024B0009F938F9387E693E09F938F931F930E9440
:1024C00024098DB79EB74A96C8CE1092C70189E5F8
:1024D00093E09F938F9311E01F930E94240984E15E
:1024E0008093C7012091D3013091D4018091AD0137
:1024F0009091AE016091B9013F932F9377270E948D
:10250000922E7F936F938AE493E09F938F931F9310
:102510000E94240988E28093C7012091D50130915F
:10252000D6018091AF019091B0016091BA013F93C3
:102530002F9377270E94922E7F936F938BE393E0E4
:102540009F938F931F930E9424098CE38093C7016C
:102550002091D7013091D8018091B1019091B201C1
:102560006091BB013F932F9377270E94922E7F9318
:102570006F938CE293E09F938F931F935BC01092B5
:10258000C7018FE193E09F938F9381E0F82EFF9234
:102590000E94240984E18093C70120911F05309196
:1025A00020058091B5019091B6016091BC013F93E7
:1025B0002F9377270E94922E7F936F9380E193E071
:1025C0009F938F93FF920E94240988E28093C70112
:1025D00020912105309122058091B3019091B401A1
:1025E0006091BD013F932F9377270E94922E7F9396
:1025F0006F9381E093E09F938F93FF920E94240951
:102600008CE38093C701609123057091240580912C
:1026100025059091260500918304109184040E9461
:10262000802D7F936F931F930F9382EF92E09F9380
:102630008F93FF920E9424098DB79EB748960DCEC6
:1026400084E18093C70180910401909105019F93DB
:102650008F9383EE92E09F938F9311E01F930E94DC
:10266000240988E28093C70180911C0299279F93D7
:102670008F9384ED92E09F938F931F930E94240980
:102680008DB79EB70A96E9CD1092C70185EC92E00E
:102690009F938F9311E01F930E94240984E18093FC
:1026A000C70180910F02909110029F938F9386EB48
:1026B00092E09F938F931F930E94240988E2809356
:1026C000C70180910B0290910C029F938F9387EA30
:1026D00092E09F938F931F930E9424098CE3809331
:1026E000C70180910D0290910E029F938F9388E90C
:1026F00092E0E8C01092C7018091140290911502F7
:102700009F938F938CE892E09F938F9311E01F9398
:102710000E94240984E18093C70180911602909160
:1027200017029F938F9380E892E09F938F931F935C
:102730000E94240988E28093C70180911802909139
:1027400019029F938F9384E792E09F938F931F9337
:102750000E9424098CE38093C70180911A02909112
:102760001B029F938F9388E692E06FCD1092C70172
:1027700080E692E09F938F9311E01F930E942409BB
:1027800084E18093C7018091890199279F938F935A
:1027900082E592E09F938F931F930E94240988E221
:1027A0008093C7018091A8019091A9019F938F9375
:1027B00084E492E09F938F931F930E9424098CE3FB
:1027C0008093C7018091FE0499279F938F938091F6
:1027D000FD0499279F938F9386E392E09F938F93B5
:1027E0001F930E94240936CD1092C7018EE292E019
:1027F0009F938F9311E01F930E94240984E180939B
:10280000C70180919304992787FD90959F938F939B
:102810008FE192E09F938F931F930E94240988E297
:102820008093C70180919404992787FD90959F9389
:102830008F9380E192E09F938F931F930E942409CE
:102840008CE38093C70180919504992787FD90952B
:102850009F938F9381E092E035C01092C70187EF7C
:1028600091E09F938F9311E01F930E94240984E1CC
:102870008093C70180919604909197049F938F93C2
:1028800089EE91E09F938F931F930E94240988E221
:102890008093C70180919804909199049F938F939E
:1028A0008BED91E09F938F931F930E9424098CE3FB
:1028B0008093C70180919A0490919B049F938F937A
:1028C0008DEC91E09F938F931F930E9424098DB705
:1028D0009EB74296C2CC8150809366011092C90186
:1028E0001092C8011F910F91FF9008951F920F92AF
:1028F0000FB60F9211242F933F934F938F939F9373
:1029000080919C04833019F08430A1F508C08EB505
:102910008093CA011EBC84E080939C042BC08091EC
:10292000CA019927382F22278EB59927282B392BB2
:10293000C9018D509E4F875E9340D0F480919F04D3
:10294000853019F0863069F406C03093A1042093D5
:10295000A00486E00BC03093A3042093A20487E078
:1029600005C03093A5042093A40485E080939F04C0
:1029700010929C049F918F914F913F912F910F90B6
:102980000FBE0F901F901895A0E1B0E0EAECF4E1C3
:102990000C94E22E6091DB017091DC018091DD01ED
:1029A0009091DE01E090F704FF2433E0EE0CFF1C71
:1029B0003A95E1F700271127A80197010E94C72E39
:1029C00059016A01C9010E94DE176D877E878F87D2
:1029D000988BC5010E943E1869877A878B879C87F0
:1029E0006091E3017091E4018091E5019091E6012D
:1029F000A80197010E94C72E79018A01C9010E948E
:102A0000DE176D837E838F839887C7010E943E18EF
:102A100069837A838B839C83A090A004B090A104E7
:102A200080919304992787FD9095A81AB90A809000
:102A3000A2049090A30480919404992787FD909517
:102A4000881A990A4090A4045090A5048091950496
:102A5000992787FD9095481A590A2090960430903E
:102A60009704C0909804D0909904C214D304D0F471
:102A700060909A0470909B046214730498F471013E
:102A800000271127B401882777FD8095982FA8018A
:102A900097010E945F2E9601442755270E94C72E5A
:102AA00049011CC02C143D0448F560909A047090B4
:102AB0009B046C147D0410F5760100271127B501E5
:102AC000882777FD8095982FA80197010E945F2E97
:102AD0009101442755270E94C72E5901B20188272A
:102AE00077FD8095982FA80197010E945F2E930192
:102AF000442755270E94C72E290124C0E0909A043C
:102B0000F0909B0400271127B501882777FD809559
:102B1000982FA80197010E945F2E91014427552705
:102B20000E94C72E5901B401882777FD8095982F00
:102B3000A80197010E945F2E9601442755270E9405
:102B4000C72E4901B0927304A0927204909275044A
:102B5000809274045092770440927604B5018827DD
:102B600077FD8095982F0E949D2D29853A854B856C
:102B70005C850E94172E5B016C01B401882777FDEC
:102B80008095982F0E949D2D7B018C012D813E8187
:102B90004F8158850E94172E2D853E854F85588977
:102BA0000E94172E9B01AC01C601B5010E94F82CB2
:102BB0003B014C01B201882777FD8095982F0E9438
:102BC0009D2D5B016C0129813A814B815C81C8019B
:102BD000B7010E94172E7B018C012D813E814F8110
:102BE0005885C601B5010E94172E9B01AC01C80192
:102BF000B7010E94F82C0E94802D7B018C01298155
:102C00003A814B815C81C601B5010E94172E2D854A
:102C10003E854F8558890E94172E9B01AC01C40147
:102C2000B3010E94F72C0E94802DDC01CB01B7017B
:102C30000E9436179C0197FF05C088279927821BA1
:102C4000930B04C088E691E0821B930BE2E1C05F26
:102C50000C94FE2E80919C04813041F0813018F05C
:102C6000823049F51CC02A9A81E016C02A988091CA
:102C70009F04853011F481E305C0863011F482E3AE
:102C800001C083E38EBD88E090E00E949D0B90938D
:102C90009E0480939D0482E080939C04089580911B
:102CA0009D0490919E040E94A60B882321F01EBCD7
:102CB00083E080939C040895A0E0B0E0E2E6F6E1B2
:102CC0000C94E42E299A2898EE24FF2400E010E0CA
:102CD000AA24BB24CC24DD246624772488249924C8
:102CE00062E3462E55248091A0049091A104081718
:102CF00019072CF40091A0041091A1040BC080913D
:102D0000A0049091A1048E159F0524F4E090A004E6
:102D1000F090A1048091A2049091A304C816D90652
:102D20002CF4C090A204D090A3040BC08091A20404
:102D30009091A3048A159B0524F4A090A204B0905E
:102D4000A3048091A4049091A504881699062CF4FC
:102D50008090A4049090A5040BC08091A40490914D
:102D6000A5048615970524F46090A4047090A5042A
:102D7000552081F485B191E0892785B985B192E02C
:102D8000892785B982E390E09093A7018093A601FB
:102D900052E3552E8AE090E00E949D0BEC01CE019B
:102DA0000E94A60B8823D9F3E091DC04FF27EE0FE5
:102DB000FF1FE255FB4F80819181843691050CF411
:102DC0004A94442011F05A948ECFC8018E199F095D
:102DD0009093970480939604C6018A199B09909357
:102DE000990480939804C4018619970990939B04D1
:102DF00080939A04E3E9F4E0C8018E0D9F1D62E020
:102E000070E00E94922E60939304C6018A0D9B1D70
:102E100062E070E00E94922E60939404C401860DDB
:102E2000971D62E070E00E94922E6093950489E005
:102E3000ACE2B1E0182E0E94382FE0E1CDB7DEB74A
:102E40000C94002F83ED8CBD84B1846A84B95B98A7
:102E500085E080939F0410929C0489E0E3E9F4E00C
:102E6000ACE2B1E0182E0E94272F08951F93CF9354
:102E7000DF93EC01892B31F46115710519F480E0C1
:102E800090E08EC077FD02C011E001C01FEF2097D7
:102E900029F48AE51802C001112482C0882777FD31
:102EA0008095982F22E330E040E050E00E945F2EB2
:102EB0009E01442737FD4095542F0E94C72EF901EB
:102EC00037FF03C0F095E195FF4F41E0EE30F40786
:102ED00034F4E655FB4F8491282F332747C056E141
:102EE000E737F5071CF02AE530E040C087E0E63719
:102EF000F8071CF029E530E039C044E0EE37F4076C
:102F00001CF028E530E032C053E0E433F5071CF054
:102F100027E530E02BC082E0E038F8071CF026E51A
:102F200030E024C042E0E830F4071CF025E530E052
:102F30001DC051E0E83BF5071CF024E530E016C069
:102F400081E0EC37F8071CF023E530E00FC041E0EA
:102F5000EF34F4071CF022E530E008C0EB52F140FA
:102F60001CF021E530E002C020E530E01C161D0613
:102F70006CF4812F992787FD9095AC01249FC001A7
:102F8000259F900D349F900D11240AC011162CF42A
:102F900084EB90E0821B930B03C0C901845B9040DB
:102FA000DF91CF911F910895FC0125913491FC018F
:102FB000329645915491CA01B9010895A0E0B0E05C
:102FC000E4EEF7E10C94EC2E9C0197FD04C041E087
:102FD000C42ED12C06C0309521953F4F9FEFC92EAE
:102FE000D92E2B3531055CF0C9018B5590408A35BF
:102FF000910540F484EB90E0821B930B9C01C1E0AF
:10300000D0E010C0C901855B90408A35910518F465
:10301000245B304005C088E691E0821B930B9C0145
:10302000CFEFDFEF220F331F220F331FC901885468
:103030009A4F0E94D4177B018C01B601882777FD37
:103040008095982F0E949D2D9B01AC01C801B7016E
:103050000E94172E7B018C01BE01882777FD809589
:10306000982F0E949D2D9B01AC01C801B7010E94C1
:10307000172EE8E0CDB7DEB70C94082F2AE530E034
:10308000281B390BC9010E94DE1708951092B90060
:103090008AE28093B800089585EA8093BC0080E0BE
:1030A00090E0089584E98093BC0008951092B900DF
:1030B0008093BB0085E88093BC0080E090E0089599
:1030C0001F920F920FB60F9211248F939F93EF933D
:1030D000FF938091CB018F5F8093CB018150E82FCC
:1030E000FF27E830F10508F074C0EF59FF4F0C944A
:1030F000192F8091CC01880F8E5A14C08091CC0179
:103100008F5F8093CC018150813009F444C08130BD
:1031100038F0823009F442C0833009F05AC041C00F
:10312000809165021092B9008093BB0085E880937E
:10313000BC004FC084E98093BC008091CC018430F6
:1031400018F41092CB0102C01092CC0185EAEFCFA7
:103150008091CD01880F8D5AE5CF8091CD018130CE
:10316000D1F08130E8F28230C9F0833091F519C096
:103170008091BB00E091CD01FF27EA55FB4F808392
:103180008091CD01813039F0813050F2823031F0C0
:103190008330F9F406C080916602C4CF8091690241
:1031A000C1CF80916B02BECF8091CD019091BB00C9
:1031B000E82FFF27EA55FB4F94838F5F8093CD0163
:1031C000843010F01092CD0184E98093BC001092FD
:1031D000CB01FF91EF919F918F910F900FBE0F90B8
:1031E0001F90189583EC80938100EFE6F0E08081DA
:1031F000806280831092D8011092D7011092D6017C
:103200001092D5011092D4011092D30108951F920B
:103210000F920FB60F9211240F931F932F933F938A
:103220004F935F936F937F938F939F93AF93BF93CE
:10323000CF93DF93EF93FF93209186003091870027
:103240008091D0019091D101281B390B809186008B
:10325000909187009093D1018093D001C9018D5D39
:1032600095408356994148F481E090E09093CF01D6
:103270008093CE011092670154C0C091CE01D091CD
:10328000CF01CA30D1050CF04CC0C9018B5F904012
:10329000845B914008F040C0A901425D5140FE01AD
:1032A000EE0FFF1FE255FB4F80819181FA01E81B71
:1032B000F90BCF01F7FF03C0909581959F4F0697BB
:1032C0004CF480911C02883C28F480911C02865F9B
:1032D00080931C02FE01EE0FFF1F8F0102551B4F52
:1032E000D8012D913C91C901880F991F820F931F1E
:1032F000840F951F64E070E00E94922ED8018D919A
:103300009C9111979B01281B390BEC53FB4F318388
:10331000208311967C936E932196D093CF01C09316
:10332000CE01FF91EF91DF91CF91BF91AF919F912E
:103330008F917F916F915F914F913F912F911F914D
:103340000F910F900FBE0F901F901895AF92BF92E4
:10335000CF92DF92EF92FF920F931F9310927A0019
:103360008091B901882369F08091AD019091AE01FF
:103370006091B90177270E94922E70931705609390
:1033800016058091BA01882369F08091AF01909170
:10339000B0016091BA0177270E94922E70931505B3
:1033A000609314058091BB01882369F08091B1017D
:1033B0009091B2016091BB0177270E94922E709389
:1033C0002B0560932A058091BC018823D9F1E090F8
:1033D0002705F09028056091B5017091B601209104
:1033E000BC010027F7FC0095102F5701680183E00E
:1033F000AA0CBB1CCC1CDD1C8A95D1F7AE18BF08EB
:10340000C00AD10A882777FD8095982FB4E0660F0F
:10341000771F881F991FBA95D1F73327442755275F
:103420000E94C72EA20EB31EC41ED51EC601B50132
:1034300028E030E040E050E00E94C72E309328059D
:10344000209327058091BD018823D9F1E0903005B4
:10345000F09031056091B3017091B4012091BD01EC
:103460000027F7FC0095102F57016801A3E0AA0C74
:10347000BB1CCC1CDD1CAA95D1F7AE18BF08C00A36
:10348000D10A882777FD8095982FF4E0660F771F83
:10349000881F991FFA95D1F73327442755270E9493
:1034A000C72EA20EB31EC41ED51EC601B50128E04C
:1034B00030E040E050E00E94C72E30933105209369
:1034C00030058091BE018823A1F1E0901905F090AC
:1034D0001A056091B7017091B8012091BE010027D3
:1034E000F7FC0095102F57016801E3E0AA0CBB1C04
:1034F000CC1CDD1CEA95D1F7AE18BF08C00AD10A72
:10350000882777FD8095982F3327442755270E94D9
:10351000C72EA20EB31EC41ED51EC601B50128E0DB
:1035200030E040E050E00E94C72E30931A0520930F
:1035300019051092AE011092AD011092B9011092CE
:10354000B0011092AF011092BA011092B201109224
:10355000B1011092BB011092B4011092B30110920C
:10356000BD011092B6011092B5011092BC011092EB
:10357000B8011092B7011092BE018091FF019091A5
:103580000002A0910102B09102028093EB0190939E
:10359000EC01A093ED01B093EE018091EF019091C9
:1035A000F001A091F101B091F2018093DB019093C1
:1035B000DC01A093DD01B093DE018091F7019091D1
:1035C000F801A091F901B091FA018093E301909381
:1035D000E401A093E501B093E6018091F30190919D
:1035E000F401A091F501B091F6018093DF01909371
:1035F000E001A093E101B093E2018091FB01909181
:10360000FC01A091FD01B091FE018093E701909330
:10361000E801A093E901B093EA018FEC80937A006E
:1036200020911402309115028091DE04E82FFF27CB
:10363000EE0FFF1FE255FB4F8081918182599F4F12
:10364000281739071CF42F5F3F4F0CC080819181F0
:1036500082599F4F821793074CF42115310531F0A1
:10366000215030403093150220931402209116020D
:10367000309117028091DF04E82FFF27EE0FFF1F24
:10368000E255FB4F8081918182599F4F281739075E
:103690001CF42F5F3F4F0CC08081918182599F4F56
:1036A000821793074CF42115310531F02150304039
:1036B00030931702209316022091180230911902BC
:1036C0008091E004E82FFF27EE0FFF1FE255FB4F2C
:1036D0008081918182599F4F281739071CF42F5FF1
:1036E0003F4F0CC08081918182599F4F8217930771
:1036F0004CF42115310531F021503040309319023E
:103700002093180220911A0230911B028091E1044B
:10371000E82FFF27EE0FFF1FE255FB4F80819181BD
:1037200082599F4F281739071CF42F5F3F4F0CC059
:103730008081918182599F4F821793074CF4211504
:10374000310531F02150304030931B0220931A0292
:10375000809114029091150297FF05C010921502F6
:10376000109214020AC08F3F910539F034F08FEFA8
:1037700090E090931502809314028091160290912C
:10378000170297FF05C010921702109216020AC086
:103790008F3F910539F034F08FEF90E0909317024E
:1037A00080931602809118029091190297FF05C02C
:1037B00010921902109218020AC08F3F910539F039
:1037C00034F08FEF90E0909319028093180280916B
:1037D0001A0290911B0297FF05C010921B021092D3
:1037E0001A020AC08F3F910539F034F08FEF90E054
:1037F00090931B0280931A021F910F91FF90EF90FC
:10380000DF90CF90BF90AF90089510927A00809192
:10381000B901882369F08091AD019091AE0160916A
:10382000B90177270E94922E7093170560931605B1
:103830008091BA01882369F08091AF019091B00125
:103840006091BA0177270E94922E709315056093BC
:1038500014058091BB01882369F08091B10190919A
:10386000B2016091BB0177270E94922E70932B05C5
:1038700060932A058091BC018823D1F06091B50145
:103880007091B6012091BC01882777FD8095982F13
:10389000F4E0660F771F881F991FFA95D1F7332739
:1038A000442755270E94C72E3093280520932705CB
:1038B0008091BD018823D1F06091B3017091B40172
:1038C0002091BD01882777FD8095982FE4E0660F51
:1038D000771F881F991FEA95D1F73327442755276B
:1038E0000E94C72E30933105209330058091BE0190
:1038F000882399F06091B7017091B8012091BE01C1
:10390000882777FD8095982F3327442755270E94D5
:10391000C72E30931A05209319051092AE0110920C
:10392000AD011092B9011092B0011092AF01109246
:10393000BA011092B2011092B1011092BB01109223
:10394000B4011092B3011092BD011092B601109211
:10395000B5011092BC011092B8011092B7011092FB
:10396000BE018FEC80937A002091140230911502F1
:103970008091DE04E82FFF27EE0FFF1FE255FB4F7B
:103980008081918182599F4F281739071CF42F5F3E
:103990003F4F0CC08081918182599F4F82179307BE
:1039A0004CF42115310531F021503040309315028F
:1039B0002093140220911602309117028091DF04A7
:1039C000E82FFF27EE0FFF1FE255FB4F808191810B
:1039D00082599F4F281739071CF42F5F3F4F0CC0A7
:1039E0008081918182599F4F821793074CF4211552
:1039F000310531F0215030403093170220931602E8
:103A000020911802309119028091E004E82FFF27DD
:103A1000EE0FFF1FE255FB4F8081918182599F4F2E
:103A2000281739071CF42F5F3F4F0CC0808191810C
:103A300082599F4F821793074CF42115310531F0BD
:103A400021503040309319022093180220911A021D
:103A500030911B028091E104E82FFF27EE0FFF1F3A
:103A6000E255FB4F8081918182599F4F281739077A
:103A70001CF42F5F3F4F0CC08081918182599F4F72
:103A8000821793074CF42115310531F02150304055
:103A900030931B0220931A02809114029091150218
:103AA00097FF05C010921502109214020AC08F3FB2
:103AB000910539F034F08FEF90E0909315028093E8
:103AC0001402809116029091170297FF05C0109280
:103AD0001702109216020AC08F3F910539F034F098
:103AE0008FEF90E090931702809316028091180256
:103AF0009091190297FF05C01092190210921802B6
:103B00000AC08F3F910539F034F08FEF90E0909329
:103B100019028093180280911A0290911B0297FF5C
:103B200005C010921B0210921A0208958F3F910552
:103B300039F034F08FEF90E090931B0280931A02DB
:103B400008951F938091E5048B3F98F08B3F19F403
:103B5000809114020EC08C3F19F48091160209C0A6
:103B60008D3F19F48091180204C08E3F21F480919A
:103B70001A028093810180918101882319F41092A7
:103B8000810104C08F3F11F4809381018091E4048E
:103B90008B3F98F08B3F19F4809114020EC08C3F3C
:103BA00019F48091160209C08D3F19F48091180212
:103BB00004C08E3F21F480911A028093800180918D
:103BC0008001882319F41092800105C0843618F012
:103BD00084E6809380018091E6048B3F98F08B3FD0
:103BE00019F4809114020EC08C3F19F480911602D2
:103BF00009C08D3F19F48091180204C08E3F21F452
:103C000080911A028093820180918201882319F4A5
:103C10001092820105C0843618F084E680938201F8
:103C20008091E8048B3F98F08B3F19F48091140247
:103C30000EC08C3F19F48091160209C08D3F19F413
:103C40008091180204C08E3F21F480911A02809363
:103C5000830180918301882319F41092830104C0A9
:103C60008F3F11F4809383018091EF048B3F98F094
:103C70008B3F19F4809114020EC08C3F19F480918F
:103C8000160209C08D3F19F48091180204C08E3FBE
:103C900021F480911A028093840180918401882309
:103CA00019F41092840104C08F3F11F480938401B1
:103CB0008091F0048B3F98F08B3F19F480911402AF
:103CC0000EC08C3F19F48091160209C08D3F19F483
:103CD0008091180204C08E3F21F480911A028093D3
:103CE0008501809185018B3010F48AE002C08F3FFE
:103CF00011F4809385018091F1048B3F98F08B3F04
:103D000019F4809114020EC08C3F19F480911602B0
:103D100009C08D3F19F48091180204C08E3F21F430
:103D200080911A028093860180918601882319F47C
:103D30001092860104C08F3F11F480938601809118
:103D4000F6048B3F98F08B3F19F4809114020EC05B
:103D50008C3F19F48091160209C08D3F19F48091AF
:103D6000180204C08E3F21F480911A0280938801CA
:103D700080918801882319F41092880104C08F3F34
:103D800011F4809388018091F7048B3F98F08B3F6A
:103D900019F4809114020EC08C3F19F48091160220
:103DA00009C08D3F19F48091180204C08E3F21F4A0
:103DB00080911A028093280280912802882319F4A6
:103DC0001092280204C08F3F11F480932802809142
:103DD000F8048B3F98F08B3F19F4809114020EC0C9
:103DE0008C3F19F48091160209C08D3F19F480911F
:103DF000180204C08E3F21F480911A028093290298
:103E000080912902882319F41092290204C08F3F5F
:103E100011F4809329028091F9048B3F98F08B3F35
:103E200019F4809114020EC08C3F19F4809116028F
:103E300009C08D3F19F48091180204C08E3F21F40F
:103E400080911A0280932A0280912A02882319F411
:103E500010922A0204C08F3F11F480932A028091AD
:103E6000FA048B3F98F08B3F19F4809114020EC036
:103E70008C3F19F48091160209C08D3F19F480918E
:103E8000180204C08E3F21F480911A0280932B0205
:103E900080912B02882319F410922B0204C08F3FCB
:103EA00011F480932B029091FB049B3FB0F09B3F59
:103EB00019F48091140204C09C3F29F480911602E9
:103EC000809389010CC09D3F19F480911802F8CFAE
:103ED0009E3F29F480911A02F3CF9093890180913B
:103EE0008901882319F41092890104C08F3F11F4CD
:103EF000809389019B3FB0F09B3F19F4809114029D
:103F000004C09C3F29F480911602809389010CC063
:103F10009D3F19F480911802F8CF9E3F29F48091BB
:103F20001A02F3CF9093890180918901882319F4B3
:103F30001092890104C08F3F11F4809389019B3F47
:103F4000B0F09B3F19F48091140204C09C3F29F407
:103F500080911602809389010CC09D3F19F48091D5
:103F60001802F8CF9E3F29F480911A02F3CF909364
:103F7000890180918901882319F41092890104C074
:103F80008F3F11F48093890110918801612F772769
:103F900067FD7095872F972F0E949D2D17FF06C0F4
:103FA00020E030E040E853E40E94F82C27E137EBB2
:103FB00041ED58E30E94172E60937C0170937D01C0
:103FC00080937E0190937F018091ED048093290579
:103FD0008091EC04809318051F91089581E08093EF
:103FE000DA0442E04093DB0483E08093DC0494E055
:103FF0009093DD0435E03093DE0486E08093DF04A7
:1040000087E08093E0041092E2048EE18093E30461
:104010008BEF8093E5048AE08093E60422E320930B
:10402000E4042093E8044093E7049093E904109299
:10403000EA0490E19093EB048FE08093EC048AEF24
:104040008093ED048AE18093EE049093EF048FEA6D
:104050008093F0048093F1048AE58093F20483E274
:104060008093F30484E18093F4041092F504309378
:10407000F60482EB8093F7041092F8041092F9048E
:104080001092FA0484E68093FB0488E28093FC0497
:10409000109200052093FD0486E98093FE0430937E
:1040A000FF04A8E0B5E0E8E6F1E08CE001900D92B5
:1040B0008150E1F7089581E08093DA0452E0509353
:1040C000DB0483E08093DC0444E04093DD0435E0CE
:1040D0003093DE0486E08093DF0487E08093E00481
:1040E00028E02093E1041092E2049EE19093E3041F
:1040F0008BEF8093E5048AE08093E60486E4809366
:10410000E4049093E8045093E7044093E904209377
:10411000EA0490E19093EB048FE08093EC048AEF43
:104120008093ED048AE18093EE049093EF0488E796
:104130008093F00496E99093F1048AE58093F20469
:1041400083E28093F30484E18093F4041092F504F5
:104150003093F60482EB8093F7041092F8041092E7
:10416000F9041092FA0484E68093FB0488E28093B9
:10417000FC041092000582E38093FD049093FE04FA
:104180003093FF04A8E0B5E0E0E7F1E08CE00190B7
:104190000D928150E1F7089580912302882301F563
:1041A00010926602109265021092690210926B02E0
:1041B00080919601882311F0809365028091970188
:1041C000882311F08093660280919801882311F072
:1041D00080936B0280919901882311F0809369028A
:1041E0008091650299279093790480937804809157
:1041F0006602992790937B0480937A0480916B02E6
:10420000992790937D0480937C048091690299277B
:1042100090937F0480937E041092CB011092CC0186
:104220000E944C180895CF93DF93109220051092AE
:104230001F05109222051092210580E090E0A0E079
:10424000B0E08093230590932405A0932505B093B7
:1042500026051092D4011092D3011092D60110922B
:10426000D5011092D8011092D7010E94051C85E05B
:1042700090E00E949D0BEC01CE010E94A60B8823CA
:10428000D9F30E94051C8091E20480FF10C0809148
:104290000A0190910B01875B934038F480910A01E9
:1042A00090910B018E5E924010F40E940E1080914E
:1042B00016059091170597FF03C0909581959F4F24
:1042C0009093D4018093D3018091140590911505AA
:1042D00097FF03C0909581959F4F9093D60180934F
:1042E000D50180912A0590912B0597FF03C09095E9
:1042F00081959F4F9093D8018093D70188E0EFE19B
:10430000F5E0A5E3B1E0182E0E94272F1092EF01EF
:104310001092F0011092F1011092F2011092F3014B
:104320001092F4011092F5011092F6011092F7012B
:104330001092F8011092F9011092FA011092FB010B
:104340001092FC011092FD011092FE011092FF01EB
:1043500010920002109201021092020210921705B0
:1043600010921605109215051092140510922B0547
:1043700010922A058091060190910701A0910801F1
:10438000B091090190938604809385041092C00136
:104390001092BF01109207021092080210920902B7
:1043A00010920A0280910B0290910C0290930E02DF
:1043B00080930D020E94C02C82E390E09093A701AD
:1043C0008093A601DF91CF910895CF93DF93109250
:1043D000200510921F05109222051092210580E001
:1043E00090E0A0E0B0E08093230590932405A09393
:1043F0002505B09326050E94051C85E090E00E94EB
:104400009D0BEC01CE010E94A60B8823D9F30E94DC
:10441000051C809127059091280597FF03C0909572
:1044200081959F4F60E170E00E94922ECFE1D5E030
:104430007093200560931F058091300590913105A0
:1044400097FF03C0909581959F4F60E170E00E94B7
:10445000922E7093220560932105609183047091E0
:104460008404882777FD8095982F0E949D2D609366
:10447000230570932405809325059093260588E0F5
:10448000A5E3B1E0FE01182E0E94382FDF91CF91F5
:1044900008951F93182F0EC080912302882361F482
:1044A00084E690E09093A7018093A6018AEF90E0C4
:1044B0000E94E00C115080F71F910895A4E0B0E035
:1044C000E4E6F2E20C94E22E0E94A619299AE09109
:1044D000DC04AE2FBB27AA0FBB1FA255BB4F0D900C
:1044E000BC91A02D9D0128583F4F3A83298337FF67
:1044F00002C01A82198280911C02843608F04AC0D8
:1045000080910101882331F484EF91E09093A70119
:104510008093A6018091350290913602009731F088
:104520000197909336028093350204C010922302C3
:1045300010921202289A8091300290913102815D8E
:10454000974028F18091F304482F55275A834983D7
:1045500081E080931202E091DA04FF27EE0FFF1F43
:10456000E255FB4F11821082E091DB04FF27EE0F32
:10457000FF1FE255FB4F11821082E091DD04FF27FF
:10458000EE0FFF1FE255FB4F11821082CEC1109239
:104590002302CBC180911C028D3808F4C6C1109251
:1045A00012028091F40422E3829FC00111249093AF
:1045B00036028093350269817A81693271056CF027
:1045C00080913002909131027FEF8F3F970781F108
:1045D0000196909331028093300280913002909145
:1045E0003102883C910520F089819A81889704F5F1
:1045F00010924B0210924C0210924D0210924E02F9
:1046000010924702109248021092490210924A02F8
:104610001092FF0110920002109201021092020209
:1046200010920302109204021092050210920602E8
:10463000E981FA81E93CF1050CF4D6C080912302AE
:10464000882309F072C1E091DD04FF27EE0FFF1F00
:10465000E255FB4F808191818C3491050CF4C1C0EF
:10466000809134028F5F80933402893C08F45DC1ED
:1046700029980E9413211092230210923402109262
:104680003102109230028091DA04282F3327F90189
:10469000EE0FFF1FE255FB4F80819181873491051A
:1046A0009CF4E091DB04FF27EE0FFF1FE255FB4F68
:1046B0000190F081E02DF7FF03C0F095E195FF4FE9
:1046C000E734F1050CF46CC08091DB04682F772788
:1046D000DB01AA0FBB1FA255BB4F8D919C91119777
:1046E000873491053CF0F901EE0FFF1FE255FB4FB7
:1046F000808191818D919C918734910564F0F901BD
:10470000EE0FFF1FE255FB4F8081918187349105A9
:1047100014F042E001C041E0FB01EE0FFF1FE25543
:10472000FB4F80819181863491055CF4F901EE0F95
:10473000FF1FE255FB4F80819181873491050CF07A
:1047400043E0FB01EE0FFF1FE255FB4F808191819B
:104750008A5B9F4F5CF4F901EE0FFF1FE255FB4FA0
:1047600080819181873491050CF044E0660F771FBA
:1047700062557B4FFB01808191818A5B9F4F5CF486
:10478000220F331F22553B4FF901808191818634DE
:1047900091050CF445E0A2E0B0E0042E0E942C2F1D
:1047A0000E94B1034AE36AED74E00E94D2030E94C2
:1047B000B1030E9449228091E20480FFB6C080913B
:1047C0000A0190910B01875B934040F480910A01AC
:1047D00090910B018E5E924008F0A7C00E940E10CF
:1047E000A4C010923402A1C049815A8143325105BC
:1047F0000CF09BC08091DD04482F5527FA01EE0F85
:10480000FF1FE255FB4F80819181855B9F4F0CF02C
:104810006DC0809133028F5F80933302893C08F42E
:1048200067C088EC8093330281E090E0909331027E
:104830008093300281E08093230210924302109211
:10484000440210924502109246021092FF0110920B
:1048500000021092010210920202109203021092C2
:10486000040210920502109206021092EF011092BB
:10487000F0011092F1011092F2011092F7011092E2
:10488000F8011092F9011092FA018091DB019091E8
:10489000DC01A091DD01B091DE018093F3019093E2
:1048A000F401A093F501B093F6018091E30190919A
:1048B000E401A091E501B091E6018093FB019093A2
:1048C000FC01A093FD01B093FE0110924B021092E7
:1048D0004C0210924D0210924E021092470210921A
:1048E00048021092490210924A0202C0109233020A
:1048F000440F551F42555B4FFA01808191818C34E2
:1049000091058CF0809132028F5F80933202893C56
:1049100060F01092230288EC8093320210923102F0
:104920001092300202C010923202809167018150D1
:1049300080936701809167018F3F29F08091120277
:10494000882309F412C10E94A11DE091DA04FF2717
:10495000EE0FFF1FDF01A255BB4F8D919C9160911F
:10496000E9047727EC53FB4F208131814091EA0421
:104970005527FC01E69FC001E79F900DF69F900D23
:104980001124F901E49F9001E59F300DF49F300D53
:104990001124820F931F90931E0280931D02E091B9
:1049A000DB04FF27EE0FFF1FDF01A255BB4F8D91E8
:1049B0009C91EC53FB4F20813181FC01E69FC001AB
:1049C000E79F900DF69F900D1124B901649F90010F
:1049D000659F300D749F300D1124820F931F9093AB
:1049E000200280931F02E091DD04FF27EE0FFF1FDE
:1049F000E255FB4F80819181909581959F4F9093D7
:104A000022028093210210918501612F772767FD93
:104A10007095872F972F0E949D2D17FF06C020E0CD
:104A200030E040E853E40E94F82C20E030E040E21F
:104A300051E40E94F82C20E030E040E85BE30E9463
:104A4000172E5B016C0160932C0570932D058093EC
:104A50002E0590932F0510918601612F772767FD12
:104A60007095872F972F0E949D2D17FF06C020E07D
:104A700030E040E853E40E94F82C20E030EE4BE2B6
:104A800057E40E943A2D60931B0570931C05809398
:104A90001D0590931E058091E20482FF0CC080E00A
:104AA00090E0A0E0B0E080931B0590931C05A093DC
:104AB0001D05B0931E0520E030E040E050E0C60147
:104AC000B5010E94A72D882364F480E090E0A0E067
:104AD000B0E080932C0590932D05A0932E05B09304
:104AE0002F0520E030E040E050E060911B05709120
:104AF0001C0580911D0590911E050E94A72D8823FD
:104B000064F480E090E0A0E0B0E080931B05909317
:104B10001C05A0931D05B0931E05809112028823E9
:104B200021F1109222021092210210921E02109284
:104B30001D021092200210921F028DEC9CECACEC36
:104B4000BDE380932C0590932D05A0932E05B09383
:104B50002F058AE097EDA3EABBE380931B059093B2
:104B60001C05A0931D05B0931E058091C101909175
:104B7000C2018D54914008F490C02091DF01309122
:104B8000E0014091E1015091E2018091DB019091BF
:104B9000DC01A091DD01B091DE01B901681B790B48
:104BA00070933A02609339022091E7013091E80155
:104BB0004091E9015091EA018091E3019091E40173
:104BC000A091E501B091E601281B390B3093380222
:104BD000209337021092C2011092C101673A710509
:104BE00034F08091D3019091D401019608C06A55A8
:104BF0007F4F4CF48091D3019091D4010197909311
:104C0000D4018093D301273A310534F08091D50146
:104C10009091D601019608C02A553F4F4CF48091DF
:104C2000D5019091D60101979093D6018093D5013B
:104C300010927A008091DB019091DC01A091DD015E
:104C4000B091DE018093F3019093F401A093F501FC
:104C5000B093F6018091E3019091E401A091E50108
:104C6000B091E6018093FB019093FC01A093FD01BC
:104C7000B093FE018091EB019091EC01A091ED01C8
:104C8000B091EE018093030290930402A093050279
:104C9000B09306028FEC80937A006091DB017091F3
:104CA000DC018091DD019091DE01A090EE04BB2437
:104CB000CC24DD24E0902705F0902805A60195017D
:104CC0000E94C72E0027F7FC0095102F2E193F09D0
:104CD000400B510BCA01B90120E130E040E050E047
:104CE0000E94C72E39014A0120933F0230934002AF
:104CF00040934102509342026091E3017091E401BC
:104D00008091E5019091E601E0903005F090310549
:104D1000A60195010E94C72E0027F7FC0095102FD1
:104D20002E193F09400B510BCA01B90120E130E0B7
:104D300040E050E00E94C72E20933B0230933C029B
:104D400040933D0250933E02E5EF6E16E1E07E0691
:104D5000E0E08E06E0E09E062CF084EF91E0A0E01B
:104D6000B0E00DC0FCE06F16FEEF7F06FFEF8F0690
:104D7000FFEF9F0664F48CE09EEFAFEFBFEF8093F0
:104D80003F0290934002A0934102B0934202253F1C
:104D900061E0360760E0460760E056072CF084EFDC
:104DA00091E0A0E0B0E009C02C503E4F4F4F5F4F64
:104DB00064F48CE09EEFAFEFBFEF80933B029093E3
:104DC0003C02A0933D02B0933E0210927A00809183
:104DD000EF019091F001A091F101B091F2012091C9
:104DE0003F02309140024091410250914202821BA9
:104DF000930BA40BB50B8093EF019093F001A0935C
:104E0000F101B093F2018091F7019091F801A09126
:104E1000F901B091FA0120913B0230913C0240919E
:104E20003D0250913E02821B930BA40BB50B809365
:104E3000F7019093F801A093F901B093FA018091E2
:104E40002102909122025C01CC24B7FCC094DC2C9E
:104E5000A0924302B0924402C0924502D092460210
:104E600097FF03C0909581959F4F84973CF0809168
:104E7000E20484FD03C081E080938A016090FF0119
:104E8000709000028090010290900202C501B7FE6E
:104E900003C0909581959F4F7C010027F7FC0095FA
:104EA000102F2091EB04332744275527C601B50165
:104EB0000E945F2E9B01AC01C801B7010E945F2ECA
:104EC00020E031E040E050E00E94C72E442737FD4B
:104ED0004095542F621A730A840A950A6092FF0162
:104EE0007092000280920102909202028091FF0172
:104EF00090910002A0910102B09102028153954766
:104F0000A040B04064F080E395E7A0E0B0E080937B
:104F1000FF0190930002A0930102B09302028091DE
:104F2000FF0190910002A0910102B0910202805D08
:104F30009A48AF4FBF4F64F480ED9AE8AFEFBFEFF0
:104F40008093FF0190930002A0930102B0930202AC
:104F50008FEC80937A008091E20483FFAEC0809151
:104F600011028150809311028F3FD9F40E94C41422
:104F700090930C0280930B0220910D0230910E024F
:104F8000821B930B845E9D4F68E671E00E94922E17
:104F9000845B90409093100280930F0282E3809391
:104FA00011026091DB017091DC018091DD01909133
:104FB000DE0120E034E040E050E00E94C72E89018D
:104FC00037FF03C0109501951F4F6091E301709169
:104FD000E4018091E5019091E60120E034E040E0B9
:104FE00050E00E94C72EB90137FF03C0709561954C
:104FF0007F4F601771070CF4B8016332710594F4A8
:1050000080918A01882371F080912C02882351F4C9
:1050100080910B0290910C0290930E0280930D02EE
:1050200010928A01209184013327629FC001639FFF
:10503000900D729F900D112460E470E00E94922EFA
:10504000A901461B570B14161506A4F580912C02D6
:10505000882371F510927A000091FF0110910002EF
:10506000209101023091020280910F029091100272
:10507000BC01469FC001479F900D569F900D112483
:1050800060E270E00E94922E882777FD8095982F2D
:10509000060F171F281F391F0093FF0110930002EE
:1050A00020930102309302028FEC80937A0005C0B6
:1050B000815001C08AEF80932C0280915F048F5F42
:1050C00080935F0480912D02815080932D028F3F49
:1050D00009F068C081E380932D026091DB0170913B
:1050E000DC018091DD019091DE01E090EE04FF246F
:1050F00000271127A80197010E94C72E3093610451
:10510000209360046091E3017091E4018091E501D6
:105110009091E601A80197010E94C72E3093630485
:10512000209362048091270590912805909365044F
:1051300080936404809130059091310590936704C9
:105140008093660480912A0590912B0590936904C1
:1051500080936804809124029091250290936B04BF
:1051600080936A046091070270910802809109029D
:1051700090910A0220E032E040E050E00E94C72E09
:1051800030936D0420936C0489819A8190936F040D
:1051900080936E0480910B0290910C0290937104A5
:1051A000809370046091DB017091DC018091DD01DE
:1051B0009091DE0120901B0530901C0540901D054C
:1051C00050901E05E0901605F090170560902C0594
:1051D00070902D0580902E0590902F050E949D2D9A
:1051E000A20191010E94172E5B016C010027F7FCC0
:1051F0000095102FC801B7010E949D2DA4019301B5
:105200000E94172E9B01AC01C601B5010E94F82C2B
:105210000E94802D70931705609316056091E3013D
:105220007091E4018091E5019091E601E090140510
:10523000F09015050E949D2DA20191010E94172E4C
:105240005B016C010027F7FC0095102FC801B70126
:105250000E949D2DA40193010E94172E9B01AC0179
:10526000C601B5010E94F82C0E94802D709315058F
:105270006093140560912A0570912B05A090EB01B5
:10528000B090EC01C090ED01D090EE01882777FD41
:105290008095982F0E949D2D7B018C0120E030E0AD
:1052A00040E05FE3C401B3010E94172E9B01AC01F3
:1052B000C801B7010E94172E7B018C01C601B50100
:1052C0000E949D2DA20191010E94172E9B01AC010D
:1052D000C801B7010E94F82C0E94802D70932B0505
:1052E00060932A058091160590911705815098408A
:1052F00034F080E098E09093170580931605809134
:105300001605909117058050984F34F480E098EF7F
:1053100090931705809316058091140590911505BB
:105320008150984034F080E098E090931505809388
:10533000140580911405909115058050984F34F410
:1053400080E098EF909315058093140580912A05CD
:1053500090912B058150984034F080E098E0909334
:105360002B0580932A0580912A0590912B0580506A
:10537000984F34F480E098EF90932B0580932A05A2
:105380008091E204992780FFCDC02091810181FFA7
:105390000EC02233B0F480912402909125024497EC
:1053A0009093270280932602109213020DC08091E1
:1053B000E704289FC001112444979093270280930B
:1053C000260281E08093130280911202882321F04B
:1053D0001092270210922602209124023091250279
:1053E0004091260250912702421753070CF09AC0B1
:1053F00080911302882309F495C0241B350B8091FA
:1054000082019927BC01269FC001279F900D369FDE
:10541000900D112460E170E00E94922E09811A81A2
:10542000061B170B2091BF013091C00180918001B4
:105430009927FC012E9FC0012F9F900D3E9F900D3C
:10544000112468E070E00E94922E061B170B6091F9
:105450000702709108028091090290910A0220E0EF
:1054600032E040E050E00E94C72ECA01B90120910D
:1054700083013327442755270E945F2E20E230E026
:1054800040E050E00E94C72EFFEF2E3C3F0714F48F
:105490002EEC3FEF80912E0290912F02AC0164E040
:1054A000440F551F6A95E1F7481B590B233331050B
:1054B00014F022E330E0021B130BCA01800F911F8E
:1054C00060E170E00E94922E70932F0260932E0292
:1054D0008091E3049927681779078CF429813A8130
:1054E000281739072CF090932F0280932E0207C0C3
:1054F00049815A8150932F0240932E020DC0809112
:105500002E0290912F0269817A816817790724F41D
:1055100070932F0260932E0280912E0290912F02A1
:105520009A838983C0902A05D0902B0580914302ED
:1055300090914402C81AD90A95E6C916D10424F0FC
:1055400014E6C12ED12C09C0ECE9CE16EFEFDE0631
:1055500024F4BCE9CB2EBFEFDB2E409078015090B5
:10556000790160907A0170907B01609116057091CD
:10557000170520911D0230911E0240914F0250915B
:105580005002241B350B621B730B882777FD809517
:10559000982F0E949D2D9B01AC01C301B2010E9476
:1055A000172E0E94802D709368026093670280918D
:1055B0006702909168028C01222717FD2095322FF7
:1055C00080914B0290914C02A0914D02B0914E02FD
:1055D000080F191F2A1F3B1F00934B0210934C0208
:1055E00020934D0230934E02101611061206130638
:1055F000ACF4C80117FF03C0909581959F4F60E000
:1056000071E00E94922E6F5F7F4F882777FD809513
:10561000982F061B170B280B390B14C0C80117FF56
:1056200003C0909581959F4F60E071E00E94922E9B
:105630006F5F7F4F882777FD8095982F060F171F84
:10564000281F391F00934B0210934C0220934D02E8
:1056500030934E0280914B0290914C02A0914D02EA
:10566000B0914E028138FEE39F07F0E0AF07F0E013
:10567000BF072CF080E89EE3A0E0B0E009C08058AE
:10568000914CAF4FBF4F64F480E891ECAFEFBFEFA8
:1056900080934B0290934C02A0934D02B0934E0224
:1056A000609167027091680280907C0190907D010A
:1056B000A0907E01B0907F01882777FD8095982F7C
:1056C0000E949D2D7B018C0160914B0270914C02D8
:1056D00080914D0290914E020E949D2D9B01AC0144
:1056E000C501B4010E94172E9B01AC01C801B7018E
:1056F0000E94F82C0E94802D9601260F371F4981A9
:105700005A81240F351F22244A30510514F4A1E098
:105710002A2E37FD02C0222019F040E050E008C0D8
:1057200080912905482F5527241735070CF4A90126
:1057300080911805E82FFF27FC83EB839F01E41776
:10574000F5070CF49A012093650229813A81261B02
:10575000370BB9016C0D7D1D77FD02C0222019F0B9
:1057600080E090E007C080912905992768177907A4
:105770000CF4CB012B813C81281739070CF49C01D8
:1057800020936602609114057091150520911F0207
:10579000309120024091510250915202241B350B4E
:1057A000621B730B882777FD8095982F0E949D2D93
:1057B0009B01AC01C301B2010E94172E0E94802DF3
:1057C000709364026093630280916302909164021B
:1057D0008C01222717FD2095322F8091470290914E
:1057E0004802A0914902B0914A02080F191F2A1FCE
:1057F0003B1F0093470210934802209349023093C5
:105800004A021016110612061306ACF4C80117FF5F
:1058100003C0909581959F4F60E071E00E94922EA9
:105820006F5F7F4F882777FD8095982F061B170B9A
:10583000280B390B14C0C80117FF03C09095819540
:105840009F4F60E071E00E94922E6F5F7F4F88272C
:1058500077FD8095982F060F171F281F391F00937B
:105860004702109348022093490230934A028091E4
:10587000470290914802A0914902B0914A028138B2
:105880003EE3930730E0A30730E0B3072CF080E855
:105890009EE3A0E0B0E009C08058914CAF4FBF4FED
:1058A00064F480E891ECAFEFBFEF809347029093F0
:1058B0004802A0934902B0934A026091630270913A
:1058C0006402882777FD8095982F0E949D2D7B018B
:1058D0008C01609147027091480280914902909139
:1058E0004A020E949D2D9B01AC01C501B4010E949A
:1058F000172E9B01AC01C801B7010E94F82C0E9431
:10590000802D29813A81260F371F2C193D0937FD3B
:1059100002C0222019F040E050E008C08091290523
:10592000482F5527241735070CF4A9012B813C81FA
:10593000241735070CF49A0120936B0289819A8110
:10594000861B970BBC016C197D0977FD02C02220D4
:1059500019F020E030E008C080912905282F332776
:10596000621773070CF49B018B819C81821793074C
:105970000CF4C90180936902E2E1CC5F0C94FE2E25
:105980008091530290915402A0915502B091560219
:1059900080935B0290935C02A0935D02B0935E02E1
:1059A0008091570290915802A0915902B0915A02E9
:1059B00080935F0290936002A0936102B0936202B1
:1059C00008951092500210924F02109252021092BB
:1059D00051020895FC014150504030F001900616EC
:1059E000D1F73197CF010895882799270895505806
:1059F000192EEFD001D0D2C0BA17620773078407FF
:105A00009507B1F188F40EF410940B2EBA2FA02D47
:105A1000062E622F202D072E732F302D082E842F57
:105A2000402D092E952F502DFF275523B9F0591BD6
:105A300049F0573E98F0469537952795A795F04041
:105A40005395C9F776F0BA0F621F731F841F30F4A5
:105A5000879577956795B795F040939517FA0F2E30
:105A60000895BF1BBB27BA0B620B730B840BF6CFD9
:105A7000DEF6DBC0AED001D091C0552359F099239A
:105A800069F09F575F57951B33F442F4903811F437
:105A9000915805C09BC091589F3F09F4C6C0BB27D1
:105AA000112462177307840730F4660F771F881F6D
:105AB000BB1F915098F311D00F920FD00F920DD0C1
:105AC000A0E82617370748071B0609F0A048BA2F99
:105AD000602D7F918F9100240895A0E80024621723
:105AE00073078407B10528F0621B730B840BB1099F
:105AF0000A2A660F771F881FBB1FA69581F7089596
:105B000097FB73D09F3738F0FEE9F91B982F872F4A
:105B1000762F6B2F05C086C09695879577956795EC
:105B2000F150D0F73EF490958095709561957F4F38
:105B30008F4F9F4F0895E89403C097FB0EF4F3DF57
:105B4000B62F672F782F892F9EE9002427C00ED00B
:105B50005EF004C00BD026F001C008D019F020F48C
:105B60008FEF089580E0089581E0089597FB092E56
:105B7000052600F8689430D0E89407FC07C0621747
:105B800073078407950721F008F40094079498940C
:105B900008959A95BB0F661F771F881F11249923BC
:105BA000A1F08823B2F79F3F59F0BB0F48F421F4CE
:105BB000002011F460FF04C06F5F7F4F8F4F9F4F35
:105BC000881F9795879597F908952CC09FEF80ECD3
:105BD0000895052E092607FA440F551F5F3F79F0F7
:105BE000AA27A51708F051E04795880F991F9F3FF6
:105BF00031F0BB27B91708F091E0879508959F9180
:105C00009F911124E3CF97FB880F991F9F3F31F09D
:105C1000BB27B91708F091E0879508959F919F9150
:105C20001124D4CF66277727882799270895D1DFB5
:105C300001D0B4CF992339F0552329F09F575F57EE
:105C4000950F13F49AF1F1CF91589F3FE1F3629FC2
:105C5000A12D0F92BB27639FA00DB11DEE27729F50
:105C6000A00DB11DEE1FAF93AA27649FB00DE11DDB
:105C7000739FB00DE11DAA1F6627829FB00DE11D25
:105C8000A61F5527749FE00DA11D551F839FE00D92
:105C9000A11D561F849FA00D511D852F7A2F6E2F99
:105CA0001F900F9088231AF4939539F48FCF000C2E
:105CB000111CBB1F661F771F881F01280895629F54
:105CC000D001739FF001829FE00DF11D649FE00DF4
:105CD000F11D929FF00D839FF00D749FF00D659F55
:105CE000F00D9927729FB00DE11DF91F639FB00D54
:105CF000E11DF91FBD01CF0111240895AA1BBB1B93
:105D000051E107C0AA1FBB1FA617B70710F0A61BBB
:105D1000B70B881F991F5A95A9F780959095BC01DC
:105D2000CD01089597FB092E07260AD077FD04D0F0
:105D3000E5DF06D000201AF4709561957F4F089535
:105D4000F6F7909581959F4F0895A1E21A2EAA1B10
:105D5000BB1BFD010DC0AA1FBB1FEE1FFF1FA2171B
:105D6000B307E407F50720F0A21BB30BE40BF50B18
:105D7000661F771F881F991F1A9469F760957095A1
:105D8000809590959B01AC01BD01CF01089597FBD3
:105D9000092E05260ED057FD04D0D7DF0AD0001CEF
:105DA00038F450954095309521953F4F4F4F5F4FB8
:105DB0000895F6F790958095709561957F4F8F4F78
:105DC0009F4F08952F923F924F925F926F927F92D2
:105DD0008F929F92AF92BF92CF92DF92EF92FF92FB
:105DE0000F931F93CF93DF93CDB7DEB7CA1BDB0BA7
:105DF0000FB6F894DEBF0FBECDBF09942A8839884C
:105E000048885F846E847D848C849B84AA84B98452
:105E1000C884DF80EE80FD800C811B81AA81B9815E
:105E2000CE0FD11D0FB6F894DEBF0FBECDBFED0172
:105E30000895EE0FFF1F0590F491E02D0994F99954
:105E4000FECFB2BDA1BDF89A119600B40895F7DF58
:105E500001921A94E1F70895F999FECFB2BDA1BD60
:105E600000BC11960FB6F894FA9AF99A0FBE0895ED
:0C5E70000190F2DF1A94E1F70895FFCFD3
:105E7C0001640A016400007D0000FF0301020304B9
:105E8C0005060708090A48616C6C6F2057656C742D
:105E9C0000000000000000000000000000000000F6
:105EAC0000000000000000000000000000000000E6
:105EBC0000000000000000000000000000000000D6
:105ECC0000000000000000000000000000000000C6
:105EDC000000000000000C014B616D657261000058
:105EEC004E6F726D616C00000000803F17B7D138A7
:0C5EFC0030FB103A403296020A640100AC
:00000001FF
/branches/v0.60_MicroMag3_Nick666/v0.60/GPS.c
0,0 → 1,26
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
signed int GPS_Nick = 0;
signed int GPS_Roll = 0;
long GpsAktuell_X = 0;
long GpsAktuell_Y = 0;
long GpsZiel_X = 0;
long GpsZiel_Y = 0;
void GPS_Neutral(void)
{
GpsZiel_X = GpsAktuell_X;
GpsZiel_Y = GpsAktuell_Y;
}
 
void GPS_BerechneZielrichtung(void)
{
GPS_Nick = 0;
GPS_Roll = 0;
}
/branches/v0.60_MicroMag3_Nick666/v0.60/README.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/branches/v0.60_MicroMag3_Nick666/v0.60/Settings.h
--- v0.60/_Settings.h (nonexistent)
+++ v0.60/_Settings.h (revision 554)
@@ -0,0 +1,50 @@
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Testmodi
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define MOTOR_OFF 0
+#define MOTOR_TEST 0
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Abstimmung
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define ACC_AMPLIFY 16
+#define FAKTOR_P 1
+#define FAKTOR_I 0.0001
+
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Debug-Interface
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+#define SIO_DEBUG 1 // Soll der Debugger aktiviert sein?
+#define MIN_DEBUG_INTERVALL 250 // in diesem Intervall werden Degugdaten ohne Aufforderung gesendet
+
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Sender
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ #define K_NICK 0
+ #define K_ROLL 1
+ #define K_GAS 2
+ #define K_GIER 3
+ #define K_POTI1 4
+ #define K_POTI2 5
+ #define K_POTI3 6
+ #define K_POTI4 7
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Kamera
+// Stick_P:3
+// Stick_D:0
+// Gyro_P: 175
+// Gyro_I: 175
+// Ki_Anteil: 10
+// +++++++++++++++++++++++++++++++
+// + Getestete Settings:
+// +++++++++++++++++++++++++++++++
+// Setting: Normal
+// Stick_P:2
+// Stick_D:8
+// Gyro_P: 80
+// Gyro_I: 150
+// Ki_Anteil: 5
+
/branches/v0.60_MicroMag3_Nick666/v0.60/analog.c
0,0 → 1,155
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
 
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 100;
volatile int AccumulateNick = 0, AccumulateRoll = 0, AccumulateGier = 0;
volatile int accumulate_AccRoll = 0,accumulate_AccNick = 0,accumulate_AccHoch = 0;
volatile char MessanzahlNick = 0, MessanzahlRoll = 0, MessanzahlGier = 0;
volatile char messanzahl_AccNick = 0, messanzahl_AccRoll = 0, messanzahl_AccHoch = 0;
volatile long Luftdruck = 32000;
volatile int StartLuftdruck;
volatile unsigned int MessLuftdruck = 1023;
unsigned char DruckOffsetSetting;
volatile int HoeheD = 0;
volatile char messanzahl_Druck;
volatile int tmpLuftdruck;
volatile unsigned int ZaehlMessungen = 0;
 
 
//#######################################################################################
//
void ADC_Init(void)
//#######################################################################################
{
ADMUX = 0;//Referenz ist extern
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE);
//Free Running Mode, Division Factor 128, Interrupt on
}
 
 
//#######################################################################################
//
void SucheLuftruckOffset(void)
//#######################################################################################
{
unsigned int off;
off = eeprom_read_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET]);
if(off > 20) off -= 10;
OCR0A = off;
Delay_ms(100);
if(MessLuftdruck < 850) off = 0;
for(; off < 250;off++)
{
OCR0A = off;
Delay_ms(50);
printf(".");
if(MessLuftdruck < 900) break;
}
eeprom_write_byte(&EEPromArray[EEPROM_ADR_LAST_OFFSET], off);
DruckOffsetSetting = off;
Delay_ms(200);
}
 
 
//#######################################################################################
//
SIGNAL(SIG_ADC)
//#######################################################################################
{
static unsigned char kanal=0,state = 0;
signed int wert;
ANALOG_OFF;
switch(state++)
{
case 0:
wert = (signed int) AdNeutralGier - ADC;
AccumulateGier += wert; //
MessanzahlGier++;
Mess_Integral_Gier += wert;// / 16;
Mess_Integral_Gier2 += wert;
kanal = 1;
ZaehlMessungen++;
break;
case 1:
wert = (signed int) ADC - AdNeutralRoll;
Mess_IntegralRoll += wert;
Mess_IntegralRoll2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateRoll += wert;
MessanzahlRoll++;
kanal = 2;
break;
case 2:
wert = (signed int) ADC - AdNeutralNick;
Mess_IntegralNick += wert;
Mess_IntegralNick2 += wert;
if(ADC < 10) wert = -700;
if(ADC > 1000) wert = +700;
AccumulateNick += wert;
MessanzahlNick++;
kanal = 4;
break;
case 3:
UBat = (3 * UBat + ADC / 3) / 4;//(UBat + ((ADC * 39) / 256) + 19) / 2;
kanal = 6;
break;
case 4:
Aktuell_ay = acc_neutral.Y - ADC;
accumulate_AccRoll += Aktuell_ay;
messanzahl_AccRoll++;
kanal = 7;
break;
case 5:
Aktuell_ax = ADC - acc_neutral.X;
accumulate_AccNick += Aktuell_ax;
messanzahl_AccNick++;
kanal = 5;
state = 6;
break;
case 6:
accumulate_AccHoch = (signed int) ADC - acc_neutral.Z;
accumulate_AccHoch += abs(Aktuell_ay) / 4 + abs(Aktuell_ax) / 4;
if(accumulate_AccHoch > 1)
{
if(acc_neutral.Z < 800) acc_neutral.Z+= 0.02;
}
else if(accumulate_AccHoch < -1)
{
if(acc_neutral.Z > 600) acc_neutral.Z-= 0.02;
}
messanzahl_AccHoch = 1;
Aktuell_az = ADC;
Mess_Integral_Hoch += accumulate_AccHoch; // Integrieren
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämpfen
kanal = 3;
state = 7;
break;
case 7:
tmpLuftdruck += ADC;
if(++messanzahl_Druck >= 5)
{
MessLuftdruck = ADC;
messanzahl_Druck = 0;
HoeheD = (int)(StartLuftdruck - tmpLuftdruck - HoehenWert); // D-Anteil = neuerWert - AlterWert
Luftdruck = (tmpLuftdruck + 3 * Luftdruck) / 4;
HoehenWert = StartLuftdruck - Luftdruck;
tmpLuftdruck = 0;
}
kanal = 0;
state = 0;
break;
default:
kanal = 0;
state = 0;
break;
}
ADMUX = kanal;
ANALOG_ON;
}
/branches/v0.60_MicroMag3_Nick666/v0.60/analog.h
0,0 → 1,23
/*#######################################################################################
 
#######################################################################################*/
 
extern volatile int UBat;
extern volatile int AccumulateNick, AccumulateRoll, AccumulateGier,accumulate_AccRoll,accumulate_AccNick,accumulate_AccHoch;
extern volatile char MessanzahlNick, MessanzahlRoll, MessanzahlGier,messanzahl_AccNick, messanzahl_AccRoll,messanzahl_AccHoch;
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az;
extern volatile long Luftdruck;
extern volatile char messanzahl_Druck;
extern volatile unsigned int ZaehlMessungen;
extern unsigned char DruckOffsetSetting;
extern volatile int HoeheD;
extern volatile unsigned int MessLuftdruck;
extern volatile int StartLuftdruck;
 
extern unsigned int ReadADC(unsigned char adc_input);
extern void ADC_Init(void);
extern void SucheLuftruckOffset(void);
 
 
#define ANALOG_OFF ADCSRA=0
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE)
/branches/v0.60_MicroMag3_Nick666/v0.60/compass.c
0,0 → 1,242
/*
 
Copyright 2007, Niklas Nold
 
This program (files compass.c and compass.h) is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation;
either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
 
Please note: All the other files for the project "Mikrokopter" by H. Buss are under the license (license_buss.txt) published by www.mikrokopter.de
*/
 
#include "main.h"
 
struct MM3_calib_struct ee_calib EEMEM; // Reservierung im EEPROM
 
struct MM3_working_struct MM3;
struct MM3_calib_struct MM3_calib;
 
 
//############################################################################
// Initialisierung
void init_MM3(void)
//############################################################################
{
SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0); //Interrupt an, Master, 156 kHz Oszillator
//SPSR = (1<<SPI2X);
DDRB |= (1<<PB7)|(1<<PB5)|(1<<PB2); // J8, MOSI, SCK Ausgang
PORTD &= ~(1<<PD3); // J5 auf Low
MM3.AXIS = MM3_X;
MM3.STATE = MM3_RESET;
// Kalibrierung aus dem EEprom lesen
eeprom_read_block(&MM3_calib,&ee_calib,sizeof(struct MM3_calib_struct));
}
 
 
//############################################################################
// Wird in der SIGNAL (SIG_OVERFLOW0) aufgerufen
void timer0_MM3(void)
//############################################################################
{
switch (MM3.STATE)
{
case MM3_RESET:
PORTB |= (1<<PB2); // J8 auf High, MM3 Reset
MM3.STATE = MM3_START_TRANSFER;
return;
case MM3_START_TRANSFER:
PORTB &= ~(1<<PB2); // J8 auf Low (war ~125 µs auf High)
if (MM3.AXIS == MM3_X) SPDR = 0x31; // Schreiben ins SPDR löst automatisch Übertragung (MOSI und MISO) aus
else if (MM3.AXIS == MM3_Y) SPDR = 0x32; // Micromag Period Select ist auf 256 (0x30)
else SPDR = 0x33; //if (MM3.AXIS == MM3_Z) // 1: x-Achse, 2: Y-Achse, 3: Z-Achse
MM3.DRDY = SetDelay(8); // Laut Datenblatt max. Zeit bis Messung fertig (bei PS 256 eigentlich 4 ms)
MM3.STATE = MM3_WAIT_DRDY;
return;
case MM3_WAIT_DRDY:
if (CheckDelay(MM3.DRDY)) {SPDR = 0x00;MM3.STATE = MM3_DRDY;} // Irgendwas ins SPDR, damit Übertragung ausgelöst wird, wenn Wartezeit vorbei
return; // Jetzt gehts weiter in SIGNAL (SIG_SPI)
}
}
 
 
//############################################################################
// SPI byte ready
SIGNAL (SIG_SPI)
//############################################################################
{
static char tmp;
int wert;
 
switch (MM3.STATE)
{
case MM3_DRDY: // 1. Byte ist da, zwischenspeichern
tmp = SPDR;
SPDR = 0x00; // Übertragung von 2. Byte auslösen
MM3.STATE = MM3_BYTE2;
return;
case MM3_BYTE2: // 2. Byte der entsprechenden Achse ist da
wert = tmp;
wert <<= 8; // 1. Byte an MSB-Stelle rücken
wert |= SPDR; // 2. Byte dranpappen
if(abs(wert) < Max_Axis_Value) // Spikes filtern. Zuweisung nur, wenn Max-Wert nicht überschritten
switch (MM3.AXIS)
{
case MM3_X:
MM3.x_axis = wert;
MM3.AXIS = MM3_Y;
break;
case MM3_Y:
MM3.y_axis = wert;
MM3.AXIS = MM3_Z;
break;
default: //case MM3_Z:
MM3.z_axis = wert;
MM3.AXIS = MM3_X;
}
MM3.STATE = MM3_RESET;
}
}
 
//############################################################################
// Kompass kalibrieren
void calib_MM3(void)
//############################################################################
{
signed int x_min=0,x_max=0,y_min=0,y_max=0,z_min=0,z_max=0;
uint8_t measurement=50,beeper=0;
unsigned int timer;
GRN_ON;
ROT_OFF;
while (measurement)
{
//H_earth = MM3.x_axis*MM3.x_axis + MM3.y_axis*MM3.y_axis + MM3.z_axis*MM3.z_axis;
if (MM3.x_axis > x_max) x_max = MM3.x_axis;
else if (MM3.x_axis < x_min) x_min = MM3.x_axis;
if (MM3.y_axis > y_max) y_max = MM3.y_axis;
else if (MM3.y_axis < y_min) y_min = MM3.y_axis;
if (MM3.z_axis > z_max) z_max = MM3.z_axis;
else if (MM3.z_axis < z_min) z_min = MM3.z_axis;
if (!beeper)
{
ROT_FLASH;
GRN_FLASH;
beeptime = 50;
beeper = 50;
}
beeper--;
// Schleife mit 100 Hz
timer = SetDelay(10);
while(!CheckDelay(timer));
// Wenn Gas zurück genommen wird, Kalibrierung mit 1/2 Sekunde Verzögerung beenden
if (PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < 100) measurement--;
}
// Wertebereich der Achsen
MM3_calib.X_range = (x_max - x_min);
MM3_calib.Y_range = (y_max - y_min);
MM3_calib.Z_range = (z_max - z_min);
// Offset der Achsen
MM3_calib.X_off = (x_max + x_min) / 2;
MM3_calib.Y_off = (y_max + y_min) / 2;
MM3_calib.Z_off = (z_max + z_min) / 2;
 
// und im EEProm abspeichern
eeprom_write_block(&MM3_calib,&ee_calib,sizeof(struct MM3_calib_struct));
}
 
 
//############################################################################
// Neigungskompensierung und Berechnung der Ausrichtung
signed int heading_MM3(void)
//############################################################################
{
float sin_nick, cos_nick, sin_roll, cos_roll;
float x_corr, y_corr;
signed int x_axis,y_axis,z_axis,nicktilt,rolltilt,heading;
unsigned int div_faktor;
div_faktor = (uint16_t)EE_Parameter.UserParam1 * 8;
// Berechung von sinus und cosinus
nicktilt = (IntegralNick/div_faktor);
sin_nick = sin_f(nicktilt);
cos_nick = cos_f(nicktilt);
rolltilt = (IntegralRoll/div_faktor);
sin_roll = sin_f(rolltilt);
cos_roll = cos_f(rolltilt);
// Offset
x_axis = (MM3.x_axis - MM3_calib.X_off);
y_axis = (MM3.y_axis - MM3_calib.Y_off);
z_axis = (MM3.z_axis - MM3_calib.Z_off);
 
// Normierung Wertebereich
if ((MM3_calib.X_range > MM3_calib.Y_range) && (MM3_calib.X_range > MM3_calib.Z_range))
{
y_axis = ((long)y_axis * MM3_calib.X_range) / MM3_calib.Y_range;
z_axis = ((long)z_axis * MM3_calib.X_range) / MM3_calib.Z_range;
}
else if ((MM3_calib.Y_range > MM3_calib.X_range) && (MM3_calib.Y_range > MM3_calib.Z_range))
{
x_axis = ((long)x_axis * MM3_calib.Y_range) / MM3_calib.X_range;
z_axis = ((long)z_axis * MM3_calib.Y_range) / MM3_calib.Z_range;
}
else //if ((MM3_calib.Z_range > MM3_calib.X_range) && (MM3_calib.Z_range > MM3_calib.Y_range))
{
x_axis = ((long)x_axis * MM3_calib.Z_range) / MM3_calib.X_range;
y_axis = ((long)y_axis * MM3_calib.Z_range) / MM3_calib.Y_range;
}
DebugOut.Analog[9] = x_axis;
DebugOut.Analog[10] = y_axis;
DebugOut.Analog[11] = z_axis;
// Neigungskompensation
x_corr = x_axis * cos_nick;
x_corr += y_axis * sin_roll * sin_nick;
x_corr -= z_axis * cos_roll * sin_nick;
y_corr = y_axis * cos_roll;
y_corr += z_axis * sin_roll;
// Winkelberechnung
heading = atan2_i(x_corr, y_corr);
if (heading < 0) heading = -heading;
else heading = 360 - heading;
/*
if (!x_corr && y_corr <0) return (90);
if (!x_corr && y_corr >0) return (270);
heading = atan(y_corr/x_corr)*57.29578;
if (x_corr < 0) heading = 180-heading;
if (x_corr > 0 && y_corr < 0) heading = -heading;
if (x_corr > 0 && y_corr > 0) heading = 360 - heading;
*/
return (heading);
}
/branches/v0.60_MicroMag3_Nick666/v0.60/compass.h
0,0 → 1,44
 
 
struct MM3_working_struct
{
uint8_t STATE;
unsigned int DRDY;
uint8_t AXIS;
volatile signed int x_axis;
volatile signed int y_axis;
volatile signed int z_axis;
};
 
 
struct MM3_calib_struct
{
int8_t X_off;
int8_t Y_off;
int8_t Z_off;
uint16_t X_range;
uint16_t Y_range;
uint16_t Z_range;
};
 
extern struct MM3_working_struct MM3;
extern struct MM3_calib_struct MM3_calib;
 
void init_MM3(void);
void timer0_MM3(void);
void calib_MM3(void);
signed int heading_MM3(void);
 
#define Max_Axis_Value 500
 
// Die Werte der Statemachine
#define MM3_RESET 0
#define MM3_START_TRANSFER 1
#define MM3_WAIT_DRDY 2
#define MM3_DRDY 3
#define MM3_BYTE2 4
#define MM3_X 5
#define MM3_Y 6
#define MM3_Z 7
#define MM3_TILT 8
#define MM3_IDLE 9
/branches/v0.60_MicroMag3_Nick666/v0.60/fc.c
0,0 → 1,846
/*#######################################################################################
Flight Control
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-commercial use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
// + clearly linked as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
 
unsigned char h,m,s;
volatile unsigned char Timeout = 0;
volatile int MesswertNick,MesswertRoll,MesswertGier;
volatile int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0;
volatile int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch;
unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0;
volatile long IntegralNick = 0,IntegralNick2 = 0;
volatile long IntegralRoll = 0,IntegralRoll2 = 0;
volatile long Integral_Gier = 0;
volatile long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0;
volatile long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0;
volatile long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0;
volatile long Mess_Integral_Hoch = 0;
int KompassValue = 0;
int KompassStartwert = 0;
int KompassRichtung = 0;
uint8_t updKompass = 0;
unsigned char MAX_GAS,MIN_GAS;
unsigned char Notlandung = 0;
unsigned char HoehenReglerAktiv = 0;
 
float GyroFaktor;
float IntegralFaktor;
 
volatile int DiffNick,DiffRoll;
int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0;
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
unsigned char MotorWert[5];
volatile unsigned char SenderOkay = 0;
int StickNick = 0,StickRoll = 0,StickGier = 0;
char MotorenEin = 0;
int HoehenWert = 0;
int SollHoehe = 0;
 
float Kp = FAKTOR_P;
float Ki = FAKTOR_I;
 
unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250
unsigned char Parameter_MaxHoehe = 251; // Wert : 0-250
unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32
unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250
unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250
unsigned char Parameter_Gyro_P = 50; // Wert : 10-250
unsigned char Parameter_Gyro_I = 150; // Wert : 0-250
unsigned char Parameter_Gier_P = 2; // Wert : 1-20
unsigned char Parameter_I_Faktor = 10; // Wert : 1-20
unsigned char Parameter_UserParam1 = 0;
unsigned char Parameter_UserParam2 = 0;
unsigned char Parameter_UserParam3 = 0;
unsigned char Parameter_UserParam4 = 0;
unsigned char Parameter_ServoNickControl = 100;
struct mk_param_struct EE_Parameter;
 
struct acc_neutral_struct ee_acc_neutral EEMEM; // Reservierung im EEPROM
struct acc_neutral_struct acc_neutral;
 
void Piep(unsigned char Anzahl)
{
while(Anzahl--)
{
if(MotorenEin) return; //auf keinen Fall im Flug!
beeptime = 100;
Delay_ms(250);
}
}
 
 
//############################################################################
// Neutrallage kalibrieren und fest im EEPROM abspeichern
void calib_acc(void)
//############################################################################
{
unsigned int timer;
acc_neutral.X = 0;
acc_neutral.Y = 0;
acc_neutral.Z = 0;
CalibrierMittelwert();
timer = SetDelay(5);
while (!CheckDelay(timer));
CalibrierMittelwert();
acc_neutral.X = abs(Mittelwert_AccNick) / ACC_AMPLIFY;
acc_neutral.Y = abs(Mittelwert_AccRoll) / ACC_AMPLIFY;
acc_neutral.Z = Aktuell_az;
eeprom_write_block(&acc_neutral,&ee_acc_neutral,sizeof(struct acc_neutral_struct));
}
 
//############################################################################
// Nullwerte ermitteln
void SetNeutral(void)
//############################################################################
{
unsigned int timer;
acc_neutral.X = 0;
acc_neutral.Y = 0;
acc_neutral.Z = 0;
AdNeutralNick = 0;
AdNeutralRoll = 0;
AdNeutralGier = 0;
CalibrierMittelwert();
timer = SetDelay(5);
while (!CheckDelay(timer));
CalibrierMittelwert();
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
{
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
}
AdNeutralNick= abs(MesswertNick);
AdNeutralRoll= abs(MesswertRoll);
AdNeutralGier= abs(MesswertGier);
eeprom_read_block(&acc_neutral,&ee_acc_neutral,sizeof(struct acc_neutral_struct));
Mess_IntegralNick = 0;
Mess_IntegralNick2 = 0;
Mess_IntegralRoll = 0;
Mess_IntegralRoll2 = 0;
Mess_Integral_Gier = 0;
MesswertNick = 0;
MesswertRoll = 0;
MesswertGier = 0;
StartLuftdruck = Luftdruck;
HoeheD = 0;
Mess_Integral_Hoch = 0;
KompassStartwert = KompassValue;
GPS_Neutral();
beeptime = 50;
}
 
//############################################################################
// Bildet den Mittelwert aus den Messwerten
void Mittelwert(void)
//############################################################################
{
// ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
ANALOG_OFF;
if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
if(messanzahl_AccNick) Mittelwert_AccNick = ((long)Mittelwert_AccNick * 7 + ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick)) / 8L;
if(messanzahl_AccRoll) Mittelwert_AccRoll = ((long)Mittelwert_AccRoll * 7 + ((ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll)) / 8L;
if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 7 + ((long)accumulate_AccHoch) / messanzahl_AccHoch) / 8L;
AccumulateNick = 0; MessanzahlNick = 0;
AccumulateRoll = 0; MessanzahlRoll = 0;
AccumulateGier = 0; MessanzahlGier = 0;
accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
accumulate_AccNick = 0;messanzahl_AccNick = 0;
accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
Integral_Gier = Mess_Integral_Gier;
// Integral_Gier2 = Mess_Integral_Gier2;
IntegralNick = Mess_IntegralNick;
IntegralRoll = Mess_IntegralRoll;
IntegralNick2 = Mess_IntegralNick2;
IntegralRoll2 = Mess_IntegralRoll2;
// ADC einschalten
ANALOG_ON;
 
/*
//------------------------------------------------------------------------------
if(MesswertNick > 200) MesswertNick += 4 * (MesswertNick - 200);
else
if(MesswertNick < -200) MesswertNick += 4 * (MesswertNick + 200);
 
if(MesswertRoll > 200) MesswertRoll += 4 * (MesswertRoll - 200);
else
if(MesswertRoll < -200) MesswertRoll += 4 * (MesswertRoll + 200);
//------------------------------------------------------------------------------
*/
if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
}
 
//############################################################################
// Messwerte beim Ermitteln der Nullage
void CalibrierMittelwert(void)
//############################################################################
{
// ADC auschalten, damit die Werte sich nicht während der Berechnung ändern
ANALOG_OFF;
if(MessanzahlNick) (MesswertNick = AccumulateNick / MessanzahlNick);
if(MessanzahlRoll) (MesswertRoll = AccumulateRoll / MessanzahlRoll);
if(MessanzahlGier) (MesswertGier = AccumulateGier / MessanzahlGier);
if(messanzahl_AccNick) Mittelwert_AccNick = ((ACC_AMPLIFY * (long)accumulate_AccNick) / messanzahl_AccNick);
if(messanzahl_AccRoll) Mittelwert_AccRoll = (ACC_AMPLIFY * (long)accumulate_AccRoll) / messanzahl_AccRoll;
if(messanzahl_AccHoch) Mittelwert_AccHoch = ((long)accumulate_AccHoch) / messanzahl_AccHoch;
AccumulateNick = 0; MessanzahlNick = 0;
AccumulateRoll = 0; MessanzahlRoll = 0;
AccumulateGier = 0; MessanzahlGier = 0;
accumulate_AccRoll = 0;messanzahl_AccRoll = 0;
accumulate_AccNick = 0;messanzahl_AccNick = 0;
accumulate_AccHoch = 0;messanzahl_AccHoch = 0;
// ADC einschalten
ANALOG_ON;
if(Poti1 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110) Poti1++; else if(Poti1 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]] + 110 && Poti1) Poti1--;
if(Poti2 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110) Poti2++; else if(Poti2 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]] + 110 && Poti2) Poti2--;
if(Poti3 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110) Poti3++; else if(Poti3 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]] + 110 && Poti3) Poti3--;
if(Poti4 < PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110) Poti4++; else if(Poti4 > PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]] + 110 && Poti4) Poti4--;
if(Poti1 < 0) Poti1 = 0; else if(Poti1 > 255) Poti1 = 255;
if(Poti2 < 0) Poti2 = 0; else if(Poti2 > 255) Poti2 = 255;
if(Poti3 < 0) Poti3 = 0; else if(Poti3 > 255) Poti3 = 255;
if(Poti4 < 0) Poti4 = 0; else if(Poti4 > 255) Poti4 = 255;
}
 
//############################################################################
// Senden der Motorwerte per I2C-Bus
void SendMotorData(void)
//############################################################################
{
if(MOTOR_OFF || !MotorenEin)
{
Motor_Hinten = 0;
Motor_Vorne = 0;
Motor_Rechts = 0;
Motor_Links = 0;
if(MotorTest[0]) Motor_Vorne = MotorTest[0];
if(MotorTest[1]) Motor_Hinten = MotorTest[1];
if(MotorTest[2]) Motor_Links = MotorTest[2];
if(MotorTest[3]) Motor_Rechts = MotorTest[3];
}
 
DebugOut.Analog[12] = Motor_Vorne;
DebugOut.Analog[13] = Motor_Hinten;
DebugOut.Analog[14] = Motor_Links;
DebugOut.Analog[15] = Motor_Rechts;
 
//Start I2C Interrupt Mode
twi_state = 0;
motor = 0;
i2c_start();
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Konstanten
// + 0-250 -> normale Werte
// + 251 -> Poti1
// + 252 -> Poti2
// + 253 -> Poti3
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void DefaultKonstanten1(void)
{
EE_Parameter.Kanalbelegung[K_NICK] = 1;
EE_Parameter.Kanalbelegung[K_ROLL] = 2;
EE_Parameter.Kanalbelegung[K_GAS] = 3;
EE_Parameter.Kanalbelegung[K_GIER] = 4;
EE_Parameter.Kanalbelegung[K_POTI1] = 5;
EE_Parameter.Kanalbelegung[K_POTI2] = 6;
EE_Parameter.Kanalbelegung[K_POTI3] = 7;
EE_Parameter.Kanalbelegung[K_POTI4] = 8;
EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV | CFG_KOMPASS_FIX;//0x01;
EE_Parameter.Hoehe_MinGas = 30;
EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
EE_Parameter.Hoehe_P = 10; // Wert : 0-32
EE_Parameter.Luftdruck_D = 70; // Wert : 0-250
EE_Parameter.Hoehe_ACC_Wirkung = 30; // Wert : 0-250
EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
EE_Parameter.Stick_D = 8; //8 // Wert : 0-64
EE_Parameter.Gier_P = 16; // Wert : 1-20
EE_Parameter.Gas_Min = 15; // Wert : 0-32
EE_Parameter.Gas_Max = 250; // Wert : 33-250
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
EE_Parameter.KompassWirkung = 16; // Wert : 0-250
EE_Parameter.Gyro_P = 120; //80 // Wert : 0-250
EE_Parameter.Gyro_I = 150; // Wert : 0-250
EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
EE_Parameter.I_Faktor = 5;
EE_Parameter.UserParam1 = 178; //zur freien Verwendung
EE_Parameter.UserParam2 = 0; //zur freien Verwendung
EE_Parameter.UserParam3 = 0; //zur freien Verwendung
EE_Parameter.UserParam4 = 0; //zur freien Verwendung
EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
EE_Parameter.ServoNickRefresh = 5;
memcpy(EE_Parameter.Name, "Normal\0", 12);
}
 
void DefaultKonstanten2(void)
{
EE_Parameter.Kanalbelegung[K_NICK] = 1;
EE_Parameter.Kanalbelegung[K_ROLL] = 2;
EE_Parameter.Kanalbelegung[K_GAS] = 3;
EE_Parameter.Kanalbelegung[K_GIER] = 4;
EE_Parameter.Kanalbelegung[K_POTI1] = 5;
EE_Parameter.Kanalbelegung[K_POTI2] = 6;
EE_Parameter.Kanalbelegung[K_POTI3] = 7;
EE_Parameter.GlobalConfig = 0;//CFG_HOEHENREGELUNG | /*CFG_HOEHEN_SCHALTER |*/ CFG_KOMPASS_AKTIV;//0x01;
EE_Parameter.Hoehe_MinGas = 30;
EE_Parameter.MaxHoehe = 251; // Wert : 0-32 251 -> Poti1
EE_Parameter.Hoehe_P = 10; // Wert : 0-32
EE_Parameter.Luftdruck_D = 50; // Wert : 0-250
EE_Parameter.Hoehe_ACC_Wirkung = 50; // Wert : 0-250
EE_Parameter.Hoehe_Verstaerkung = 2; // Wert : 0-50
EE_Parameter.Stick_P = 4; //2 // Wert : 1-6
EE_Parameter.Stick_D = 0; //8 // Wert : 0-64
EE_Parameter.Gier_P = 16; // Wert : 1-20
EE_Parameter.Gas_Min = 15; // Wert : 0-32
EE_Parameter.Gas_Max = 250; // Wert : 33-250
EE_Parameter.GyroAccFaktor = 26; // Wert : 1-64
EE_Parameter.KompassWirkung = 16; // Wert : 0-250
EE_Parameter.Gyro_P = 175; //80 // Wert : 0-250
EE_Parameter.Gyro_I = 175; // Wert : 0-250
EE_Parameter.UnterspannungsWarnung = 90; // Wert : 0-250
EE_Parameter.NotGas = 35; // Wert : 0-250 // Gaswert bei Empangsverlust
EE_Parameter.NotGasZeit = 20; // Wert : 0-250 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
EE_Parameter.UfoAusrichtung = 0; // X oder + Formation
EE_Parameter.I_Faktor = 5;
EE_Parameter.UserParam1 = 178; //zur freien Verwendung
EE_Parameter.UserParam2 = 0; //zur freien Verwendung
EE_Parameter.UserParam3 = 0; //zur freien Verwendung
EE_Parameter.UserParam4 = 0; //zur freien Verwendung
EE_Parameter.UserParam3 = 0; //zur freien Verwendung
EE_Parameter.UserParam4 = 0; //zur freien Verwendung
EE_Parameter.ServoNickControl = 100; // Wert : 0-250 // Stellung des Servos
EE_Parameter.ServoNickComp = 40; // Wert : 0-250 // Einfluss Gyro/Servo
EE_Parameter.ServoNickCompInvert = 0; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
EE_Parameter.ServoNickMin = 50; // Wert : 0-250 // Anschlag
EE_Parameter.ServoNickMax = 150; // Wert : 0-250 // Anschlag
EE_Parameter.ServoNickRefresh = 5;
memcpy(EE_Parameter.Name, "Kamera\0", 12);
}
 
 
//############################################################################
// Trägt ggf. das Poti als Parameter ein
void ParameterZuordnung(void)
//############################################################################
{
 
#define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;}
CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255);
CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100);
CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100);
CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255);
CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255);
CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255);
CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255);
CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255);
CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255);
CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255);
CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3,0,255);
CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4,0,255);
 
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255);
 
Ki = (float) Parameter_I_Faktor * 0.0001;
MAX_GAS = EE_Parameter.Gas_Max;
MIN_GAS = EE_Parameter.Gas_Min;
}
 
 
//############################################################################
//
void MotorRegler(void)
//############################################################################
{
int motorwert,pd_ergebnis,h,tmp_int;
int GierMischanteil,GasMischanteil;
static long SummeNick=0,SummeRoll=0;
static long sollGier = 0,tmp_long,tmp_long2;
static int IntegralFehlerNick = 0;
static int IntegralFehlerRoll = 0;
static unsigned int RcLostTimer;
static unsigned char delay_neutral = 0;
static unsigned char delay_einschalten = 0,delay_ausschalten = 0;
static unsigned int modell_fliegt = 0;
static int hoehenregler = 0;
static char TimerWerteausgabe = 0;
static char NeueKompassRichtungMerken = 1;
Mittelwert();
 
GRN_ON;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gaswert ermitteln
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120;
if(GasMischanteil < 0) GasMischanteil = 0;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Emfang schlecht
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay < 100)
{
if(!PcZugriff) beeptime = 500;
if(RcLostTimer) RcLostTimer--;
else
{
MotorenEin = 0;
Notlandung = 0;
}
ROT_ON;
if(modell_fliegt > 2000) // wahrscheinlich in der Luft --> langsam absenken
{
GasMischanteil = EE_Parameter.NotGas;
Notlandung = 1;
PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0;
PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0;
/* Poti1 = 65;
Poti2 = 48;
Poti3 = 0;
*/ }
else MotorenEin = 0;
}
else
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Emfang gut
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(SenderOkay > 140)
{
Notlandung = 0;
RcLostTimer = EE_Parameter.NotGasZeit * 50;
if(GasMischanteil > 40)
{
if(modell_fliegt < 0xffff) modell_fliegt++;
}
if((modell_fliegt < 200) || (GasMischanteil < 40))
{
SummeNick = 0;
SummeRoll = 0;
Mess_Integral_Gier = 0;
Mess_Integral_Gier2 = 0;
}
if((GasMischanteil > 200) && MotorenEin == 0)
{
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// auf Nullwerte kalibrieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte
{
unsigned char setting;
if(++delay_neutral > 200) // nicht sofort
{
GRN_OFF;
SetNeutral();
MotorenEin = 0;
delay_neutral = 0;
modell_fliegt = 0;
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70)
{
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4;
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5;
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken
}
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], sizeof(struct mk_param_struct));
Piep(GetActiveParamSetNumber());
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert?
{
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset();
}
}
}
else delay_neutral = 0;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gas ist unten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(GasMischanteil < 35)
{
// Starten
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75)
{
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Einschalten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(++delay_einschalten > 200)
{
delay_einschalten = 200;
modell_fliegt = 1;
MotorenEin = 1;
sollGier = 0;
Mess_Integral_Gier = 0;
Mess_Integral_Gier2 = 0;
Mess_IntegralNick = 0;
Mess_IntegralRoll = 0;
Mess_IntegralNick2 = IntegralNick;
Mess_IntegralRoll2 = IntegralRoll;
SummeNick = 0;
SummeRoll = 0;
}
}
else delay_einschalten = 0;
//Auf Neutralwerte setzen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Auschalten
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75)
{
if(++delay_ausschalten > 200) // nicht sofort
{
MotorenEin = 0;
delay_ausschalten = 200;
modell_fliegt = 0;
}
}
else delay_ausschalten = 0;
}
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// neue Werte von der Funke
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(!NewPpmData-- || Notlandung)
{
ParameterZuordnung();
StickNick = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P;
StickNick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D;
StickRoll = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P;
StickRoll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D;
StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]];
 
GyroFaktor = ((float)Parameter_Gyro_P + 10.0) / 256.0;
IntegralFaktor = ((float) Parameter_Gyro_I) / 44000;
 
if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0;
if(GyroFaktor < 0) GyroFaktor = 0;
if(IntegralFaktor < 0) IntegralFaktor = 0;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Bei Empfangsausfall im Flug
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(Notlandung)
{
StickGier = 0;
StickNick = 0;
StickRoll = 0;
GyroFaktor = 0.1;
IntegralFaktor = 0.005;
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gyro-Drift kompensieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define DRIFT_FAKTOR 3
if(ZaehlMessungen >= 1000 / DRIFT_FAKTOR)
{
IntegralFehlerNick = IntegralNick2 - IntegralNick;
IntegralFehlerRoll = IntegralRoll2 - IntegralRoll;
ZaehlMessungen = 0;
if(IntegralFehlerNick > 500/DRIFT_FAKTOR) AdNeutralNick++;
if(IntegralFehlerNick < -500/DRIFT_FAKTOR) AdNeutralNick--;
if(IntegralFehlerRoll > 500/DRIFT_FAKTOR) AdNeutralRoll++;
if(IntegralFehlerRoll < -500/DRIFT_FAKTOR) AdNeutralRoll--;
//if(Mess_Integral_Gier2 > 500/DRIFT_FAKTOR) AdNeutralGier--;
//if(Mess_Integral_Gier2 <-500/DRIFT_FAKTOR) AdNeutralGier++;
ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
Mess_IntegralNick2 = IntegralNick;
Mess_IntegralRoll2 = IntegralRoll;
Mess_Integral_Gier2 = Integral_Gier;
ANALOG_ON; // ADC einschalten
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Integrale auf ACC-Signal abgleichen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick) / 16;
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll) / 16;
#define AUSGLEICH 500
if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH;
if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH;
if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH;
if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH;
ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
Mess_IntegralNick -= tmp_long;
Mess_IntegralRoll -= tmp_long2;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sollGier = StickGier;
if(abs(StickGier) > 35)
{
if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) NeueKompassRichtungMerken = 1;
}
tmp_int = EE_Parameter.Gier_P * (sollGier * abs(sollGier)) / 256; // expo
Mess_Integral_Gier -= tmp_int;
if(Mess_Integral_Gier > 30000) Mess_Integral_Gier = 30000; // begrenzen
if(Mess_Integral_Gier <-30000) Mess_Integral_Gier =-30000;
ANALOG_ON; // ADC einschalten
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Kompass
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)
{
int w,v;
static uint8_t SignalSchlecht = 0;
 
if (!updKompass--) // Aufruf mit ~10 Hz
{
KompassValue = heading_MM3();
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
updKompass = 50;
}
w = abs(IntegralNick /1024); // mit zunehmender Neigung den Einfluss drosseln
v = abs(IntegralRoll /1024);
if(v > w) w = v; // grösste Neigung ermitteln
if(w < 35 && NeueKompassRichtungMerken && !SignalSchlecht)
{
KompassStartwert = KompassValue;
NeueKompassRichtungMerken = 0;
}
w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren
w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln
if(w > 0)
{
if(!SignalSchlecht)
{
ANALOG_OFF; // ADC ausschalten, damit die Werte sich nicht während der Berechnung ändern
Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten
ANALOG_ON; // ADC einschalten
}
else SignalSchlecht--;
}
else SignalSchlecht = 250; // so lange das Signal taub stellen --> ca. 1/2 sek
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Debugwerte zuordnen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DebugOut.Sekunden++;
if(!TimerWerteausgabe--)
{
TimerWerteausgabe = 49;
// DebugOut.Analog[0] = MesswertNick;
// DebugOut.Analog[1] = MesswertRoll;
// DebugOut.Analog[2] = MesswertGier;
DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor;
DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor;
 
DebugOut.Analog[2] = Mittelwert_AccNick;
DebugOut.Analog[3] = Mittelwert_AccRoll;
DebugOut.Analog[4] = MesswertGier;
DebugOut.Analog[5] = HoehenWert;
DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
DebugOut.Analog[7] = GasMischanteil;
DebugOut.Analog[8] = KompassValue;
 
// Kanäle 9 bis 11 in compass.c
 
// DebugOut.Analog[9] = SollHoehe;
// DebugOut.Analog[10] = Mess_Integral_Gier / 128;
// DebugOut.Analog[11] = KompassStartwert;
// DebugOut.Analog[10] = Parameter_Gyro_I;
// DebugOut.Analog[10] = EE_Parameter.Gyro_I;
// DebugOut.Analog[9] = KompassRichtung;
// DebugOut.Analog[10] = GasMischanteil;
// DebugOut.Analog[3] = HoeheD * 32;
// DebugOut.Analog[4] = hoehenregler;
}
 
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MesswertNick = IntegralNick * IntegralFaktor + MesswertNick * GyroFaktor;
MesswertRoll = IntegralRoll * IntegralFaktor + MesswertRoll * GyroFaktor;
MesswertGier = MesswertGier * (GyroFaktor/2) + Integral_Gier * IntegralFaktor;
// Maximalwerte abfangen
#define MAX_SENSOR 2048
if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR;
if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR;
if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR;
if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR;
if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR;
if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Höhenregelung
// Die Höhenregelung schwächt lediglich das Gas ab, erhöht es allerdings nicht
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//OCR0B = 180 - (Poti1 + 120) / 4;
//DruckOffsetSetting = OCR0B;
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung
{
int tmp_int;
if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert
{
if(Parameter_MaxHoehe < 50)
{
SollHoehe = HoehenWert - 20; // Parameter_MaxHoehe ist der PPM-Wert des Schalters
HoehenReglerAktiv = 0;
}
else
HoehenReglerAktiv = 1;
}
else
{
SollHoehe = Parameter_MaxHoehe * EE_Parameter.Hoehe_Verstaerkung - 20;
HoehenReglerAktiv = 1;
}
 
if(Notlandung) SollHoehe = 0;
h = HoehenWert;
if((h > SollHoehe) && HoehenReglerAktiv) // zu hoch --> drosseln
{ h = ((h - SollHoehe) * (int) Parameter_Hoehe_P) / 16; // Differenz bestimmen --> P-Anteil
h = GasMischanteil - h; // vom Gas abziehen
h -= (HoeheD * Parameter_Luftdruck_D)/8; // D-Anteil
tmp_int = ((Mess_Integral_Hoch / 512) * (signed long) Parameter_Hoehe_ACC_Wirkung) / 32;
if(tmp_int > 50) tmp_int = 50;
else if(tmp_int < -50) tmp_int = -50;
h -= tmp_int;
hoehenregler = (hoehenregler*15 + h) / 16;
if(hoehenregler < EE_Parameter.Hoehe_MinGas) // nicht unter MIN
{
if(GasMischanteil >= EE_Parameter.Hoehe_MinGas) hoehenregler = EE_Parameter.Hoehe_MinGas;
if(GasMischanteil < EE_Parameter.Hoehe_MinGas) hoehenregler = GasMischanteil;
}
if(hoehenregler > GasMischanteil) hoehenregler = GasMischanteil; // nicht mehr als Gas
GasMischanteil = hoehenregler;
}
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Mischer und PI-Regler
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gier-Anteil
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GierMischanteil = MesswertGier - sollGier; // Regler für Gier
if(GierMischanteil > 100) GierMischanteil = 100;
if(GierMischanteil < -100) GierMischanteil = -100;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Nick-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffNick = Kp * (MesswertNick - (StickNick - GPS_Nick)); // Differenz bestimmen
SummeNick += DiffNick; // I-Anteil
if(SummeNick > 0) SummeNick-= (abs(SummeNick)/256 + 1); else SummeNick += abs(SummeNick)/256 + 1;
if(SummeNick > 16000) SummeNick = 16000;
if(SummeNick < -16000) SummeNick = -16000;
pd_ergebnis = DiffNick + Ki * SummeNick; // PI-Regler für Nick
// Motor Vorn
motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer
if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
if (motorwert < MIN_GAS) motorwert = MIN_GAS;
Motor_Vorne = motorwert;
// Motor Heck
motorwert = GasMischanteil - pd_ergebnis + GierMischanteil;
if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
if (motorwert < MIN_GAS) motorwert = MIN_GAS;
Motor_Hinten = motorwert;
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Roll-Achse
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DiffRoll = Kp * (MesswertRoll - (StickRoll - GPS_Roll)); // Differenz bestimmen
SummeRoll += DiffRoll; // I-Anteil
if(SummeRoll > 0) SummeRoll-= (abs(SummeRoll)/256 + 1); else SummeRoll += abs(SummeRoll)/256 + 1;
if(SummeRoll > 16000) SummeRoll = 16000;
if(SummeRoll < -16000) SummeRoll = -16000;
pd_ergebnis = DiffRoll + Ki * SummeRoll; // PI-Regler für Roll
// Motor Links
motorwert = GasMischanteil + pd_ergebnis - GierMischanteil;
if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
if (motorwert < MIN_GAS) motorwert = MIN_GAS;
Motor_Links = motorwert;
// Motor Rechts
motorwert = GasMischanteil - pd_ergebnis - GierMischanteil;
if ((motorwert < 0) | (GasMischanteil < 10)) motorwert = 0;
else if(motorwert > MAX_GAS) motorwert = MAX_GAS;
if (motorwert < MIN_GAS) motorwert = MIN_GAS;
Motor_Rechts = motorwert;
// +++++++++++++++++++++++++++++++++++++++++++++++
 
}
 
/branches/v0.60_MicroMag3_Nick666/v0.60/fc.h
0,0 → 1,117
/*#######################################################################################
Flight Control
#######################################################################################*/
 
#ifndef _FC_H
#define _FC_H
 
extern volatile unsigned char Timeout;
extern unsigned char Sekunde,Minute;
extern volatile long IntegralNick,IntegralNick2;
extern volatile long IntegralRoll,IntegralRoll2;
extern volatile long Mess_IntegralNick,Mess_IntegralNick2;
extern volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
extern volatile long Mess_Integral_Hoch;
extern volatile long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2;
extern int KompassValue;
extern int KompassStartwert;
extern int KompassRichtung;
extern int HoehenWert;
extern int SollHoehe;
extern volatile int MesswertNick,MesswertRoll,MesswertGier;
extern volatile int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll;
extern volatile int NeutralAccX, NeutralAccY,Mittelwert_AccHoch;
extern volatile float NeutralAccZ;
 
 
void MotorRegler(void);
void SendMotorData(void);
void CalibrierMittelwert(void);
void Mittelwert(void);
void SetNeutral(void);
void Piep(unsigned char Anzahl);
void DefaultKonstanten1(void);
void DefaultKonstanten2(void);
 
unsigned char h,m,s;
volatile unsigned char Timeout ;
unsigned char CosinusNickWinkel, CosinusRollWinkel;
volatile long IntegralNick,IntegralNick2;
volatile long IntegralRoll,IntegralRoll2;
volatile long Integral_Gier;
volatile long Mess_IntegralNick,Mess_IntegralNick2;
volatile long Mess_IntegralRoll,Mess_IntegralRoll2;
volatile long Mess_Integral_Gier;
volatile int DiffNick,DiffRoll;
extern int Poti1, Poti2, Poti3, Poti4;
volatile unsigned char Motor_Vorne,Motor_Hinten,Motor_Rechts,Motor_Links, Count;
unsigned char MotorWert[5];
volatile unsigned char SenderOkay;
int StickNick,StickRoll,StickGier;
char MotorenEin;
extern void DefaultKonstanten(void);
 
 
struct mk_param_struct
{
unsigned char Kanalbelegung[8]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
unsigned char Hoehe_MinGas; // Wert : 0-100
unsigned char Luftdruck_D; // Wert : 0-250
unsigned char MaxHoehe; // Wert : 0-32
unsigned char Hoehe_P; // Wert : 0-32
unsigned char Hoehe_Verstaerkung; // Wert : 0-50
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
unsigned char Stick_P; // Wert : 1-6
unsigned char Stick_D; // Wert : 0-64
unsigned char Gier_P; // Wert : 1-20
unsigned char Gas_Min; // Wert : 0-32
unsigned char Gas_Max; // Wert : 33-250
unsigned char GyroAccFaktor; // Wert : 1-64
unsigned char KompassWirkung; // Wert : 0-32
unsigned char Gyro_P; // Wert : 10-250
unsigned char Gyro_I; // Wert : 0-250
unsigned char UnterspannungsWarnung; // Wert : 0-250
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
unsigned char UfoAusrichtung; // X oder + Formation
unsigned char I_Faktor; // Wert : 0-250
unsigned char UserParam1; // Wert : 0-250
unsigned char UserParam2; // Wert : 0-250
unsigned char UserParam3; // Wert : 0-250
unsigned char UserParam4; // Wert : 0-250
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
unsigned char ServoNickRefresh; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char ServoNickCompInvert; // Wert : 0-250 // Richtung Einfluss Gyro/Servo
unsigned char Reserved[7];
char Name[12];
};
 
struct acc_neutral_struct
{
volatile int X;
volatile int Y;
volatile float Z;
};
 
extern struct acc_neutral_struct acc_neutral;
extern void calib_acc(void);
 
 
extern struct mk_param_struct EE_Parameter;
 
extern unsigned char Parameter_Luftdruck_D;
extern unsigned char Parameter_MaxHoehe;
extern unsigned char Parameter_Hoehe_P;
extern unsigned char Parameter_Hoehe_ACC_Wirkung;
extern unsigned char Parameter_KompassWirkung;
extern unsigned char Parameter_Gyro_P;
extern unsigned char Parameter_Gyro_I;
extern unsigned char Parameter_Gier_P;
extern unsigned char Parameter_ServoNickControl;
 
#endif //_FC_H
 
/branches/v0.60_MicroMag3_Nick666/v0.60/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/v0.60/flight.pnps
0,0 → 1,0
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd>
/branches/v0.60_MicroMag3_Nick666/v0.60/gps.h
0,0 → 1,4
extern signed int GPS_Nick;
extern signed int GPS_Roll;
extern void GPS_Neutral(void);
extern void GPS_BerechneZielrichtung(void);
/branches/v0.60_MicroMag3_Nick666/v0.60/license_buss.txt
0,0 → 1,52
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + Nur für den privaten Gebrauch
// + www.MikroKopter.com
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
// + dass eine Nutzung (auch auszugsweise) nur für den privaten und nichtkommerziellen Gebrauch zulässig ist.
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
// + bzgl. der Nutzungsbedingungen aufzunehmen.
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
// + Verkauf von Luftbildaufnahmen, usw.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
// + eindeutig als Ursprung verlinkt und genannt werden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
// + Benutzung auf eigene Gefahr
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Portierung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
// + mit unserer Zustimmung zulässig
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
// + this list of conditions and the following disclaimer.
// + * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
// + from this software without specific prior written permission.
// + * The use of this project (hardware, software, binary files, sources and documentation) is only permittet
// + for non-profit use (directly or indirectly)
// + Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
// + with our written permission
// + * If sources or documentations are redistributet, our webpage (http://www.MikroKopter.de) must be
// + clearly linked and named as origin
// + * porting to systems other than hardware from www.mikrokopter.de is not allowed
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/branches/v0.60_MicroMag3_Nick666/v0.60/main.c
0,0 → 1,236
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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;
 
 
// -- Parametersatz aus EEPROM lesen ---
// number [0..5]
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
if (number > 5) number = 5;
number--; // Auf Index 0 bis 4 anpassen
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--; // Auf Index 0 bis 4 anpassen
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)
{
return(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]));
}
 
//############################################################################
//Hauptprogramm
int main (void)
//############################################################################
{
unsigned int timer;
unsigned int timer2 = 0;
 
DDRC = 0x01; // SCL
PORTC = 0xff; // Pullup SDA
DDRB = 0x1B; // LEDs und Druckoffset
PORTB |= (1<<PB0); // LED_Rot
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5
DDRD |= (1<<PD7); // J7
PORTD = 0xF7;
 
MCUSR &=~(1<<WDRF);
WDTCSR |= (1<<WDCE)|(1<<WDE);
WDTCSR = 0;
 
beeptime = 1000;
 
StickGier = 0; PPM_in[K_GAS] = 0;StickRoll = 0; StickNick = 0;
 
ROT_OFF;
Timer_Init();
UART_Init();
rc_sum_init();
ADC_Init();
i2c_init();
init_MM3();
sei();
 
VersionInfo.Hauptversion = VERSION_HAUPTVERSION;
VersionInfo.Nebenversion = VERSION_NEBENVERSION;
VersionInfo.PCKompatibel = VERSION_KOMPATIBEL;
printf("\n\rFlightControl V%d.%d ", VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
printf("\n\r==============================");
GRN_ON;
 
if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != 10) // seit V 0.60
{
printf("\n\rInit. EEPROM: Generiere Default-Parameter...");
DefaultKonstanten1();
for (unsigned char i=0;i<6;i++)
{
if(i==2) DefaultKonstanten2();
WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], sizeof(struct mk_param_struct));
}
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 1);
eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], 10);
calib_acc();
}
ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], sizeof(struct mk_param_struct));
printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber());
//kurze Wartezeit (sonst reagiert die "Kompass kalibrieren?"-Abfrage nicht
timer = SetDelay(500);
while(!CheckDelay(timer));
//Kompass kalibrieren?
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 100 && PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 100)
{
printf("\n\rKalibriere Kompass");
calib_MM3();
}
//Neutrallage kalibrieren?
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 100 && PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -100)
{
printf("\n\rKalibriere Neutrallage");
calib_acc();
}
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
printf("\n\rAbgleich Luftdrucksensor..");
timer = SetDelay(2500);
SucheLuftruckOffset();
while (!CheckDelay(timer));
printf("OK\n\r");
}
SetNeutral();
 
ROT_OFF;
beeptime = 2000;
DebugIn.Analog[1] = 1000;
DebugIn.Digital[0] = 0x55;
 
printf("\n\rSteuerung: ");
if (EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) printf("HeadingHold");
else printf("Neutral");
printf("\n\n\r");
LcdClear();
while (1)
{
if (UpdateMotor) // ReglerIntervall
{
UpdateMotor=0;
MotorRegler();
SendMotorData();
ROT_OFF;
if(PcZugriff) PcZugriff--;
if(SenderOkay) SenderOkay--;
if (UBat < EE_Parameter.UnterspannungsWarnung)
{
beeptime = 2000;
}
if(!Timeout)
{
i2c_init();
}
else
{
ROT_OFF;
}
}
 
if(SIO_DEBUG)
{
DatenUebertragung();
BearbeiteRxDaten();
}
else BearbeiteRxDaten();
if(CheckDelay(timer2))
{
if(MotorenEin) PORTC ^= 0x10; else PORTC &= ~0x10;
timer = SetDelay(500);
}
}
return (1);
}
 
/branches/v0.60_MicroMag3_Nick666/v0.60/main.h
0,0 → 1,93
#ifndef _MAIN_H
#define _MAIN_H
 
//Hier die Quarz Frequenz einstellen
#if defined (__AVR_ATmega32__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
#endif
 
#if defined (__AVR_ATmega644__)
#define SYSCLK 20000000L //Quarz Frequenz in Hz
//#define SYSCLK 16000000L //Quarz Frequenz in Hz
#endif
 
 
// neue Hardware
#define ROT_OFF PORTB &=~(1<<PB0)
#define ROT_ON PORTB |= (1<<PB0)
#define ROT_FLASH PORTB ^= (1<<PB0)
#define GRN_OFF PORTB &=~(1<<PB1)
#define GRN_ON PORTB |= (1<<PB1)
#define GRN_FLASH PORTB ^= (1<<PB1)
 
//#ifndef F_CPU
//#error ################## F_CPU nicht definiert oder ungültig #############
//#endif
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
//#define ANZ_MITTELWERT 4
 
#define EEPROM_ADR_VALID 1
#define EEPROM_ADR_ACTIVE_SET 2
#define EEPROM_ADR_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 SYSCLK
//extern unsigned long SYSCLK;
extern volatile int i_Nick[20],i_Roll[20],DiffNick,DiffRoll;
extern volatile unsigned char SenderOkay;
extern unsigned char CosinusNickWinkel, CosinusRollWinkel;
 
extern void ReadParameterSet (unsigned char number, unsigned char *buffer, unsigned char length);
extern void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length);
extern unsigned char GetActiveParamSetNumber(void);
extern unsigned char EEPromArray[];
 
#include <stdlib.h>
#include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <avr/boot.h>
#include <avr/wdt.h>
 
#include "old_macros.h"
 
#include "_settings.h"
#include "printf_P.h"
#include "compass.h"
#include "timer0.h"
#include "uart.h"
#include "analog.h"
#include "twimaster.h"
#include "menu.h"
#include "rc.h"
#include "fc.h"
#include "gps.h"
#include "math.h"
 
#ifndef EEMEM
#define EEMEM __attribute__ ((section (".eeprom")))
#endif
 
#define DEBUG_DISPLAY_INTERVALL 123 // in ms
 
 
#define DELAY_US(x) ((unsigned int)( (x) * 1e-6 * F_CPU ))
#endif //_MAIN_H
 
 
 
 
 
 
/branches/v0.60_MicroMag3_Nick666/v0.60/makefile
0,0 → 1,393
#--------------------------------------------------------------------
# MCU name
MCU = atmega644
F_CPU = 20000000
#-------------------------------------------------------------------
HAUPT_VERSION = 0
NEBEN_VERSION = 60
VERSION_KOMPATIBEL = 4 # PC-Kompatibilität
#-------------------------------------------------------------------
 
ifeq ($(MCU), atmega32)
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m
 
HEX_NAME = MEGA32
endif
 
ifeq ($(MCU), atmega644)
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m
 
# -u bei neuen Controllern wieder einspielen
 
HEX_NAME = MEGA644
endif
 
ifeq ($(F_CPU), 16000000)
QUARZ = 16MHZ
endif
 
ifeq ($(F_CPU), 20000000)
QUARZ = 20MHZ
endif
 
 
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
 
# Target file name (without extension).
 
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(HAUPT_VERSION)_$(NEBEN_VERSION)_MM3
 
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c compass.c math.c
SRC += twimaster.c rc.c fc.c GPS.c
 
##########################################################################################################
 
 
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
 
 
 
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
EXTRAINCDIRS =
 
 
# Optional compiler flags.
# -g: generate debugging information (for GDB, or for COFF conversion)
# -O*: optimization level
# -f...: tuning, see gcc manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create assembler listing
CFLAGS = -O$(OPT) \
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
-Wall -Wstrict-prototypes \
-mtiny-stack -mcall-prologues \
#-Wno-pointer-sign \
-Wa,-adhlns=$(<:.c=.lst) \
$(patsubst %,-I%,$(EXTRAINCDIRS))
 
 
# Set a "language standard" compiler flag.
# Unremark just one line below to set the language standard to use.
# gnu99 = C99 + GNU extensions. See GCC manual for more information.
#CFLAGS += -std=c89
#CFLAGS += -std=gnu89
#CFLAGS += -std=c99
CFLAGS += -std=gnu99
 
CFLAGS += -DVERSION_HAUPTVERSION=$(HAUPT_VERSION) -DVERSION_NEBENVERSION=$(NEBEN_VERSION) -DVERSION_KOMPATIBEL=$(VERSION_KOMPATIBEL)
 
 
# Optional assembler flags.
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
 
 
 
# Optional linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
 
# Additional libraries
 
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
 
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
 
# -lm = math library
LDFLAGS += -lm
 
 
##LDFLAGS += -T./linkerfile/avr5.x
 
 
 
# Programming support using avrdude. Settings and variables.
 
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = dt006
#AVRDUDE_PROGRAMMER = ponyser
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden
 
 
#AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_PORT = lpt1 # programmer connected to parallel port
 
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS)
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
 
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
 
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE += -y
 
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
AVRDUDE_FLAGS += -V
 
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_FLAGS += -v -v
 
# ---------------------------------------------------------------------------
# Define directories, if needed.
DIRAVR = c:/winavr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = .
DIRLIB = $(DIRAVR)/avr/lib
 
 
# Define programs and commands.
SHELL = sh
 
CC = avr-gcc
 
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
 
# Programming support using avrdude.
AVRDUDE = avrdude
 
REMOVE = rm -f
COPY = cp
 
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) -A $(TARGET).elf
 
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
 
 
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
 
# Define all listing files.
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
 
# Combine all necessary flags and optional flags.
# Add target processor to flags.
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS)
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
 
 
# Default target.
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
$(TARGET).lss $(TARGET).sym sizeafter finished end
 
 
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
 
finished:
@echo $(MSG_ERRORS_NONE)
 
end:
@echo $(MSG_END)
@echo
 
 
# Display size of file.
sizebefore:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
 
sizeafter:
@if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
 
 
 
# Display compiler version information.
gccversion :
@$(CC) --version
 
 
# Convert ELF to COFF for use in debugging / simulating in
# AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
 
 
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
 
 
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
 
 
 
 
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
 
 
 
 
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
 
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
 
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
 
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
avr-nm -n $< > $@
 
 
 
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
 
 
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
 
 
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
 
 
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
 
 
 
 
 
 
# Target: clean project.
clean: begin clean_list finished end
 
clean_list :
@echo
@echo $(MSG_CLEANING)
# $(REMOVE) $(TARGET).hex
$(REMOVE) $(TARGET).eep
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).cof
$(REMOVE) $(TARGET).elf
$(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).obj
$(REMOVE) $(TARGET).a90
$(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lnk
$(REMOVE) $(TARGET).lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
 
 
# Automatically generate C source code dependencies.
# (Code originally taken from the GNU make user manual and modified
# (See README.txt Credits).)
#
# Note that this will work with sh (bash) and sed that is shipped with WinAVR
# (see the SHELL variable defined above).
# This may not work with other shells or other seds.
#
%.d: %.c
set -e; $(CC) -MM $(ALL_CFLAGS) $< \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
[ -s $@ ] || rm -f $@
 
 
# Remove the '-' if you want to see the dependency files generated.
-include $(SRC:.c=.d)
 
 
 
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
clean clean_list program
 
/branches/v0.60_MicroMag3_Nick666/v0.60/math.c
0,0 → 1,126
/*
 
Copyright 2007, Niklas Nold
 
This program (files math.c and math.h) is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation;
either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
 
Please note: All the other files for the project "Mikrokopter" by H. Buss are under the license (license_buss.txt) published by www.mikrokopter.de
*/
 
#include "main.h"
 
 
const uint8_t pgm_atan[270] PROGMEM = {0,1,2,3,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,27,28,29,30,31,32,33,33,34,35,36,37,37,38,39,39,40,41,41,42,43,43,44,44,45,46,46,47,47,48,48,49,49,50,50,51,51,52,52,52,53,53,54,54,54,55,55,56,56,56,57,57,57,58,58,58,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,64,64,64,64,65,65,65,65,65,66,66,66,66,66,67,67,67,67,67,67,68,68,68,68,68,68,69,69,69,69,69,69,69,70,70,70,70,70,70,70,70,71,71,71,71,71,71,71,71,72,72,72,72,72,72,72,72,72,73,73,73,73,73,73,73,73,73,73,74,74,74,74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,75,75,75,75,75,75,75,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79};
 
//############################################################################
// Arkustangens2 im Gradmaß
signed int atan2_i(signed int x, signed int y)
//############################################################################
{
int i,angle;
int8_t m;
if (!x && !y) return 0; //atan2 = 0 für x und y = 0
if (y < 0) m=-1;
else m=1;
if (x==0) return (90*m); // atan2 = 90° für x = 0
i = abs(((long)y*50) / x); // Berechne i für die Lookup table (Schrittweite atan(x) ist 0.02 -> *50)
 
if (i<270) angle = pgm_read_byte(&pgm_atan[i]); // Lookup für 1° bis 79°
else if (i>5750) angle = 90; // Grenzwert ist 90°
else if (i>=1910) angle = 89; // 89° bis 80° über Wertebereiche
else if (i>=1150) angle = 88;
else if (i>=820) angle = 87;
else if (i>=640) angle = 86;
else if (i>=520) angle = 85;
else if (i>=440) angle = 84;
else if (i>=380) angle = 83;
else if (i>=335) angle = 82;
else if (i>=299) angle = 81;
else angle = 80; // (i>=270)
if (x > 0) return (angle*m); // Quadrant I und IV
else if ((x < 0) && (m > 0)) return (-angle + 180); // Quadrant II
else return (angle - 180); // x < 0 && y < 0 Quadrant III
}
 
 
const float pgm_sinus_f[91] PROGMEM = {0.0,0.0174524,0.0348995,0.0523360,0.0697565,0.0871557,0.1045285,0.1218693,0.1391731,0.1564345,0.1736482,0.1908090,0.2079117,0.2249510,0.2419219,0.2588190,0.2756373,0.2923717,0.3090170,0.3255681,0.3420201,0.3583679,0.3746066,0.3907311,0.4067366,0.4226182,0.4383711,0.4539905,0.4694715,0.4848096,0.5000000,0.5150381,0.5299193,0.5446390,0.5591929,0.5735764,0.5877852,0.6018150,0.6156615,0.6293204,0.6427876,0.6560590,0.6691306,0.6819983,0.6946584,0.7071068,0.7193398,0.7313537,0.7431448,0.7547096,0.7660444,0.7771459,0.7880107,0.7986355,0.8090170,0.8191520,0.8290376,0.8386706,0.8480481,0.8571673,0.8660254,0.8746197,0.8829476,0.8910065,0.8987940,0.9063078,0.9135454,0.9205048,0.9271838,0.9335804,0.9396926,0.9455186,0.9510565,0.9563047,0.9612617,0.9659258,0.9702957,0.9743701,0.9781476,0.9816272,0.9848077,0.9876883,0.9902681,0.9925461,0.9945219,0.9961947,0.9975640,0.9986295,0.9993908,0.9998477,1.0};
 
inline float pgm_read_float(const float *addr)
{
union
{
uint16_t i[2]; // 2 16-bit-Worte
float f;
} u;
u.i[0]=pgm_read_word((PGM_P)addr);
u.i[1]=pgm_read_word((PGM_P)addr+2);
return u.f;
}
 
//############################################################################
// Kosinusfunktion im Gradmaß
float cos_f(signed int winkel)
//############################################################################
{
return (sin_f(90-winkel));
}
 
//############################################################################
// Sinusfunktion im Gradmaß
float sin_f(signed int winkel)
//############################################################################
{
short int m,n;
float sinus;
//winkel = winkel % 360;
if (winkel < 0)
{
m = -1;
winkel = abs(winkel);
}
else m = +1;
// Quadranten auswerten
if (winkel <= 90) n=1;
else if ((winkel > 90 ) && (winkel <= 180)) {winkel = 180 - winkel; n = 1;}
else if ((winkel > 180 ) && (winkel <= 270)) {winkel = winkel - 180; n = -1;}
else {winkel = 360 - winkel; n = -1;} //if ((winkel > 270) && (winkel <= 360))
 
sinus = pgm_read_float(&pgm_sinus_f[winkel]);
 
return (sinus*m*n);
}
 
/*
const uint8_t pgm_asin[201] PROGMEM = {0,0,1,1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9,10,10,10,11,11,11,12,12,12,12,13,13,13,14,14,14,14,15,15,15,16,16,16,17,17,17,17,18,18,18,19,19,19,20,20,20,20,21,21,21,22,22,22,23,23,23,24,24,24,25,25,25,25,26,26,26,27,27,27,28,28,28,29,29,29,30,30,30,31,31,31,32,32,32,33,33,33,34,34,34,35,35,35,36,36,37,37,37,38,38,38,39,39,39,40,40,41,41,41,42,42,42,43,43,44,44,44,45,45,46,46,46,47,47,48,48,49,49,49,50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57,58,58,59,59,60,60,61,62,62,63,64,64,65,66,66,67,68,68,69,70,71,72,73,74,75,76,77,79,80,82,84,90};
 
//############################################################################
// Akurssinusfunktion im Gradmaß
int8_t asin_i(signed int i)
//############################################################################
{
signed char m;
if (i < 0) {m=-1;i=abs(i);}
else m=1;
i = i % 200;
return (pgm_read_byte(&pgm_asin[i]) * m);
}
*/
/branches/v0.60_MicroMag3_Nick666/v0.60/math.h
0,0 → 1,11
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Peter Muehlenbrock
// Definitionen fuer Modul math
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
extern signed int atan2_i(signed int x, signed int y);
extern float cos_f(signed int winkel);
extern float sin_f(signed int winkel);
//extern int8_t asin_i(signed int i);
/branches/v0.60_MicroMag3_Nick666/v0.60/menu.c
0,0 → 1,129
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + 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 = 12,MenuePunkt=0;
if(RemoteTasten & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LcdClear(); }
if(RemoteTasten & KEY2) { MenuePunkt++; LcdClear(); }
if((RemoteTasten & KEY1) && (RemoteTasten & KEY2)) MenuePunkt = 0;
LCD_printfxy(17,0,"[%i]",MenuePunkt);
switch(MenuePunkt)
{
case 0:
LCD_printfxy(0,0,"++ MikroKopter ++");
LCD_printfxy(0,1,"V%d.%d",VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
LCD_printfxy(0,2,"Setting: %d ",GetActiveParamSetNumber());
LCD_printfxy(0,3,"(c) Holger Buss");
// if(RemoteTasten & KEY3) TestInt--;
// if(RemoteTasten & KEY4) TestInt++;
break;
case 1:
if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
{
LCD_printfxy(0,0,"Hoehe: %5i",HoehenWert);
LCD_printfxy(0,1,"SollHoehe: %5i",SollHoehe);
LCD_printfxy(0,2,"Luftdruck: %5i",MessLuftdruck);
LCD_printfxy(0,3,"Off : %5i",DruckOffsetSetting);
}
else
{
LCD_printfxy(0,1,"Keine ");
LCD_printfxy(0,2,"Höhenregelung");
}
break;
case 2:
LCD_printfxy(0,0,"akt. Lage");
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024);
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024);
LCD_printfxy(0,3,"Kompass: %5i",KompassValue);
break;
case 3:
LCD_printfxy(0,0,"K1:%4i K2:%4i ",PPM_in[1],PPM_in[2]);
LCD_printfxy(0,1,"K3:%4i K4:%4i ",PPM_in[3],PPM_in[4]);
LCD_printfxy(0,2,"K5:%4i K6:%4i ",PPM_in[5],PPM_in[6]);
LCD_printfxy(0,3,"K7:%4i Kanäle ",PPM_in[7]);
break;
case 4:
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]);
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]],PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]);
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]],PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]);
LCD_printfxy(0,3,"P3:%4i Kanäle ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]);
break;
case 5:
LCD_printfxy(0,0,"Gyro - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",AccumulateNick / MessanzahlNick, AdNeutralNick);
LCD_printfxy(0,2,"Roll %4i (%3i)",AccumulateRoll / MessanzahlRoll, AdNeutralRoll);
LCD_printfxy(0,3,"Gier %4i (%3i)",AccumulateGier / MessanzahlGier, AdNeutralGier);
break;
case 6:
LCD_printfxy(0,0,"ACC - Sensor");
LCD_printfxy(0,1,"Nick %4i (%3i)",accumulate_AccNick / messanzahl_AccNick,acc_neutral.X);
LCD_printfxy(0,2,"Roll %4i (%3i)",accumulate_AccRoll / messanzahl_AccRoll,acc_neutral.Y);
LCD_printfxy(0,3,"Hoch %4i (%3i)",Aktuell_az/*accumulate_AccHoch / messanzahl_AccHoch*/,(int)acc_neutral.Z);
break;
case 7:
LCD_printfxy(0,1,"Spannung: %5i",UBat);
LCD_printfxy(0,2,"Empf.Pegel:%5i",SenderOkay);
break;
case 8:
LCD_printfxy(0,0,"Kompass ");
LCD_printfxy(0,1,"Richtung: %5i",KompassRichtung);
LCD_printfxy(0,2,"Messwert: %5i",KompassValue);
LCD_printfxy(0,3,"Start: %5i",KompassStartwert);
break;
case 9:
LCD_printfxy(0,0,"Poti1: %3i",Poti1);
LCD_printfxy(0,1,"Poti2: %3i",Poti2);
LCD_printfxy(0,2,"Poti3: %3i",Poti3);
LCD_printfxy(0,3,"Poti4: %3i",Poti4);
break;
case 10:
LCD_printfxy(0,0,"Servo " );
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl);
LCD_printfxy(0,2,"Stellung: %3i",ServoValue);
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax);
break;
case 11:
LCD_printfxy(0,0,"MM3 Off");
LCD_printfxy(0,1,"X_Offset: %3i",MM3_calib.X_off);
LCD_printfxy(0,2,"Y_Offset: %3i",MM3_calib.Y_off);
LCD_printfxy(0,3,"Z_Offset: %3i",MM3_calib.Z_off);
break;
case 12:
LCD_printfxy(0,0,"MM3 Range");
LCD_printfxy(0,1,"X_Range: %4i",MM3_calib.X_range);
LCD_printfxy(0,2,"Y_Range: %4i",MM3_calib.Y_range);
LCD_printfxy(0,3,"Z_Range: %4i",MM3_calib.Z_range);
break;
default: MaxMenue = MenuePunkt - 1;
MenuePunkt = 0;
break;
}
RemoteTasten = 0;
}
/branches/v0.60_MicroMag3_Nick666/v0.60/menu.h
0,0 → 1,7
void LcdClear(void);
 
extern void Menu(void);
extern char DisplayBuff[80];
extern unsigned char DispPtr;
unsigned char RemoteTasten;
 
/branches/v0.60_MicroMag3_Nick666/v0.60/old_macros.h
0,0 → 1,47
/*
For backwards compatibility only.
Ingo Busker ingo@mikrocontroller.com
*/
 
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
 
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
 
#ifndef inb
#define inb(sfr) _SFR_BYTE(sfr)
#endif
 
#ifndef outb
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val))
#endif
 
#ifndef inw
#define inw(sfr) _SFR_WORD(sfr)
#endif
 
#ifndef outw
#define outw(sfr, val) (_SFR_WORD(sfr) = (val))
#endif
 
#ifndef outp
#define outp(val, sfr) outb(sfr, val)
#endif
 
#ifndef inp
#define inp(sfr) inb(sfr)
#endif
 
#ifndef BV
#define BV(bit) _BV(bit)
#endif
 
 
#ifndef PRG_RDB
#define PRG_RDB pgm_read_byte
#endif
 
/branches/v0.60_MicroMag3_Nick666/v0.60/printf_P.c
0,0 → 1,480
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt
 
/*
Copyright (C) 1993 Free Software Foundation
 
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option)
any later version.
 
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this library; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
As a special exception, if you link this library with files
compiled with a GNU compiler to produce an executable, this does not cause
the resulting executable to be covered by the GNU General Public License.
This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */
 
/*
* Copyright (c) 1990 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
/******************************************************************************
This file is a patched version of printf called _printf_P
It is made to work with avr-gcc for Atmel AVR MCUs.
There are some differences from standard printf:
1. There is no floating point support (with fp the code is about 8K!)
2. Return type is void
3. Format string must be in program memory (by using macro printf this is
done automaticaly)
4. %n is not implemented (just remove the comment around it if you need it)
5. If LIGHTPRINTF is defined, the code is about 550 bytes smaller and the
folowing specifiers are disabled :
space # * . - + p s o O
6. A function void uart_sendchar(char c) is used for output. The UART must
be initialized before using printf.
 
Alexander Popov
sasho@vip.orbitel.bg
******************************************************************************/
 
/*
* Actual printf innards.
*
* This code is large and complicated...
*/
 
#include <string.h>
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
 
#include "main.h"
 
 
//#define LIGHTPRINTF
char PrintZiel;
 
 
char Putchar(char zeichen)
{
if(PrintZiel == OUT_LCD) { DisplayBuff[DispPtr++] = zeichen; return(1);}
else return(uart_putchar(zeichen));
}
 
 
void PRINT(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(*ptr++);
}
void PRINTP(const char * ptr, unsigned int len)
{
for(;len;len--) Putchar(pgm_read_byte(ptr++));
}
 
void PAD_SP(signed char howmany)
{
for(;howmany>0;howmany--) Putchar(' ');
}
 
void PAD_0(signed char howmany)
{
for(;howmany>0;howmany--) Putchar('0');
}
 
#define BUF 40
 
/*
* Macros for converting digits to letters and vice versa
*/
#define to_digit(c) ((c) - '0')
#define is_digit(c) ((c)<='9' && (c)>='0')
#define to_char(n) ((n) + '0')
 
/*
* Flags used during conversion.
*/
#define LONGINT 0x01 /* long integer */
#define LONGDBL 0x02 /* long double; unimplemented */
#define SHORTINT 0x04 /* short integer */
#define ALT 0x08 /* alternate form */
#define LADJUST 0x10 /* left adjustment */
#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */
#define HEXPREFIX 0x40 /* add 0x or 0X prefix */
 
void _printf_P (char ziel,char const *fmt0, ...) /* Works with string from FLASH */
{
va_list ap;
register const char *fmt; /* format string */
register char ch; /* character from fmt */
register int n; /* handy integer (short term usage) */
register char *cp; /* handy char pointer (short term usage) */
const char *fmark; /* for remembering a place in fmt */
register unsigned char flags; /* flags as above */
signed char width; /* width from format (%8d), or 0 */
signed char prec; /* precision from format (%.3d), or -1 */
char sign; /* sign prefix (' ', '+', '-', or \0) */
unsigned long _ulong=0; /* integer arguments %[diouxX] */
#define OCT 8
#define DEC 10
#define HEX 16
unsigned char base; /* base for [diouxX] conversion */
signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */
signed char dpad; /* extra 0 padding needed for integers */
signed char fieldsz; /* field size expanded by sign, dpad etc */
/* The initialization of 'size' is to suppress a warning that
'size' might be used unitialized. It seems gcc can't
quite grok this spaghetti code ... */
signed char size = 0; /* size of converted field or string */
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
char ox[2]; /* space for 0x hex-prefix */
 
PrintZiel = ziel; // bestimmt, LCD oder UART
va_start(ap, fmt0);
fmt = fmt0;
 
/*
* Scan the format for conversions (`%' character).
*/
for (;;) {
for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++)
/* void */;
if ((n = fmt - fmark) != 0) {
PRINTP(fmark, n);
}
if (ch == '\0')
goto done;
fmt++; /* skip over '%' */
 
flags = 0;
dprec = 0;
width = 0;
prec = -1;
sign = '\0';
 
rflag: ch = PRG_RDB(fmt++);
reswitch:
#ifdef LIGHTPRINTF
if (ch=='o' || ch=='u' || (ch|0x20)=='x') {
#else
if (ch=='u' || (ch|0x20)=='x') {
#endif
if (flags&LONGINT) {
_ulong=va_arg(ap, unsigned long);
} else {
register unsigned int _d;
_d=va_arg(ap, unsigned int);
_ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d;
}
}
#ifndef LIGHTPRINTF
if(ch==' ') {
/*
* ``If the space and + flags both appear, the space
* flag will be ignored.''
* -- ANSI X3J11
*/
if (!sign)
sign = ' ';
goto rflag;
} else if (ch=='#') {
flags |= ALT;
goto rflag;
} else if (ch=='*'||ch=='-') {
if (ch=='*') {
/*
* ``A negative field width argument is taken as a
* - flag followed by a positive field width.''
* -- ANSI X3J11
* They don't exclude field widths read from args.
*/
if ((width = va_arg(ap, int)) >= 0)
goto rflag;
width = -width;
}
flags |= LADJUST;
flags &= ~ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch=='+') {
sign = '+';
goto rflag;
} else if (ch=='.') {
if ((ch = PRG_RDB(fmt++)) == '*') {
n = va_arg(ap, int);
prec = n < 0 ? -1 : n;
goto rflag;
}
n = 0;
while (is_digit(ch)) {
n = n*10 + to_digit(ch);
ch = PRG_RDB(fmt++);
}
prec = n < 0 ? -1 : n;
goto reswitch;
} else
#endif /* LIGHTPRINTF */
if (ch=='0') {
/*
* ``Note that 0 is taken as a flag, not as the
* beginning of a field width.''
* -- ANSI X3J11
*/
if (!(flags & LADJUST))
flags |= ZEROPAD; /* '-' disables '0' */
goto rflag;
} else if (ch>='1' && ch<='9') {
n = 0;
do {
n = 10 * n + to_digit(ch);
ch = PRG_RDB(fmt++);
} while (is_digit(ch));
width = n;
goto reswitch;
} else if (ch=='h') {
flags |= SHORTINT;
goto rflag;
} else if (ch=='l') {
flags |= LONGINT;
goto rflag;
} else if (ch=='c') {
*(cp = buf) = va_arg(ap, int);
size = 1;
sign = '\0';
} else if (ch=='D'||ch=='d'||ch=='i') {
if(ch=='D')
flags |= LONGINT;
if (flags&LONGINT) {
_ulong=va_arg(ap, long);
} else {
register int _d;
_d=va_arg(ap, int);
_ulong = flags&SHORTINT ? (long)(short)_d : (long)_d;
}
if ((long)_ulong < 0) {
_ulong = -_ulong;
sign = '-';
}
base = DEC;
goto number;
} else
/*
if (ch=='n') {
if (flags & LONGINT)
*va_arg(ap, long *) = ret;
else if (flags & SHORTINT)
*va_arg(ap, short *) = ret;
else
*va_arg(ap, int *) = ret;
continue; // no output
} else
*/
#ifndef LIGHTPRINTF
if (ch=='O'||ch=='o') {
if (ch=='O')
flags |= LONGINT;
base = OCT;
goto nosign;
} else if (ch=='p') {
/*
* ``The argument shall be a pointer to void. The
* value of the pointer is converted to a sequence
* of printable characters, in an implementation-
* defined manner.''
* -- ANSI X3J11
*/
/* NOSTRICT */
_ulong = (unsigned int)va_arg(ap, void *);
base = HEX;
flags |= HEXPREFIX;
ch = 'x';
goto nosign;
} else if (ch=='s') { // print a string from RAM
if ((cp = va_arg(ap, char *)) == NULL) {
cp=buf;
cp[0] = '(';
cp[1] = 'n';
cp[2] = 'u';
cp[4] = cp[3] = 'l';
cp[5] = ')';
cp[6] = '\0';
}
if (prec >= 0) {
/*
* can't use strlen; can only look for the
* NUL in the first `prec' characters, and
* strlen() will go further.
*/
char *p = (char*)memchr(cp, 0, prec);
 
if (p != NULL) {
size = p - cp;
if (size > prec)
size = prec;
} else
size = prec;
} else
size = strlen(cp);
sign = '\0';
} else
#endif /* LIGHTPRINTF */
if(ch=='U'||ch=='u') {
if (ch=='U')
flags |= LONGINT;
base = DEC;
goto nosign;
} else if (ch=='X'||ch=='x') {
base = HEX;
/* leading 0x/X only if non-zero */
if (flags & ALT && _ulong != 0)
flags |= HEXPREFIX;
 
/* unsigned conversions */
nosign: sign = '\0';
/*
* ``... diouXx conversions ... if a precision is
* specified, the 0 flag will be ignored.''
* -- ANSI X3J11
*/
number: if ((dprec = prec) >= 0)
flags &= ~ZEROPAD;
 
/*
* ``The result of converting a zero value with an
* explicit precision of zero is no characters.''
* -- ANSI X3J11
*/
cp = buf + BUF;
if (_ulong != 0 || prec != 0) {
register unsigned char _d,notlastdigit;
do {
notlastdigit=(_ulong>=base);
_d = _ulong % base;
 
if (_d<10) {
_d+='0';
} else {
_d+='a'-10;
if (ch=='X') _d&=~0x20;
}
*--cp=_d;
_ulong /= base;
} while (notlastdigit);
#ifndef LIGHTPRINTF
// handle octal leading 0
if (base==OCT && flags & ALT && *cp != '0')
*--cp = '0';
#endif
}
 
size = buf + BUF - cp;
} else { //default
/* "%?" prints ?, unless ? is NUL */
if (ch == '\0')
goto done;
/* pretend it was %c with argument ch */
cp = buf;
*cp = ch;
size = 1;
sign = '\0';
}
 
/*
* All reasonable formats wind up here. At this point,
* `cp' points to a string which (if not flags&LADJUST)
* should be padded out to `width' places. If
* flags&ZEROPAD, it should first be prefixed by any
* sign or other prefix; otherwise, it should be blank
* padded before the prefix is emitted. After any
* left-hand padding and prefixing, emit zeroes
* required by a decimal [diouxX] precision, then print
* the string proper, then emit zeroes required by any
* leftover floating precision; finally, if LADJUST,
* pad with blanks.
*/
 
/*
* compute actual size, so we know how much to pad.
*/
fieldsz = size;
 
dpad = dprec - size;
if (dpad < 0)
dpad = 0;
 
if (sign)
fieldsz++;
else if (flags & HEXPREFIX)
fieldsz += 2;
fieldsz += dpad;
 
/* right-adjusting blank padding */
if ((flags & (LADJUST|ZEROPAD)) == 0)
PAD_SP(width - fieldsz);
 
/* prefix */
if (sign) {
PRINT(&sign, 1);
} else if (flags & HEXPREFIX) {
ox[0] = '0';
ox[1] = ch;
PRINT(ox, 2);
}
 
/* right-adjusting zero padding */
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
PAD_0(width - fieldsz);
 
/* leading zeroes from decimal precision */
PAD_0(dpad);
 
/* the string or number proper */
PRINT(cp, size);
 
/* left-adjusting padding (always blank) */
if (flags & LADJUST)
PAD_SP(width - fieldsz);
}
done:
va_end(ap);
}
/branches/v0.60_MicroMag3_Nick666/v0.60/printf_P.h
0,0 → 1,19
#ifndef _PRINTF_P_H_
#define _PRINTF_P_H_
 
#include <avr/pgmspace.h>
 
#define OUT_V24 0
#define OUT_LCD 1
 
 
extern void _printf_P (char, char const *fmt0, ...);
extern char PrintZiel;
 
 
#define printf_P(format, args...) _printf_P(OUT_V24,format , ## args)
#define printf(format, args...) _printf_P(OUT_V24,PSTR(format) , ## args)
#define LCD_printfxy(x,y,format, args...) { DispPtr = y * 20 + x; _printf_P(OUT_LCD,PSTR(format) , ## args);}
#define LCD_printf(format, args...) { _printf_P(OUT_LCD,PSTR(format) , ## args);}
 
#endif
/branches/v0.60_MicroMag3_Nick666/v0.60/rc.c
0,0 → 1,85
/*#######################################################################################
Decodieren eines RC Summen Signals
#######################################################################################*/
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "rc.h"
#include "main.h"
 
volatile int PPM_in[11];
volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
volatile unsigned char NewPpmData = 1;
 
//############################################################################
//zum decodieren des PPM-Signals wird Timer1 mit seiner Input
//Capture Funktion benutzt:
void rc_sum_init (void)
//############################################################################
{
TCCR1B=(1<<CS11)|(1<<CS10)|(1<<ICES1)|(1<<ICNC1);//|(1 << WGM12); //timer1 prescale 64
 
 
// PWM
//TCCR1A = (1 << COM1B1) | (1 << WGM11) | (1 << WGM10);
//TCCR1B |= (1 << WGM12);
//OCR1B = 55;
TIMSK1 |= _BV(ICIE1);
AdNeutralGier = 0;
AdNeutralRoll = 0;
AdNeutralNick = 0;
return;
}
 
//############################################################################
//Diese Routine startet und inizialisiert den Timer für RC
SIGNAL(SIG_INPUT_CAPTURE1)
//############################################################################
 
{
static unsigned int AltICR=0;
signed int signal = 0;
static int index;
signal = (unsigned int) ICR1 - AltICR;
AltICR = ICR1;
//Syncronisationspause?
if ((signal > 1500) && (signal < 8000))
{
index = 1;
NewPpmData = 0; // Null bedeutet: Neue Daten
// OCR2A = Poti2/2 + 80;
}
else
{
if(index < 10)
{
if((signal > 250) && (signal < 687))
{
signal -= 466;
// Stabiles Signal
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;}
signal = (3 * (PPM_in[index]) + signal) / 4;
//373 entspricht ca. 1.5ms also Mittelstellung
PPM_diff[index] = signal - PPM_in[index];
PPM_in[index] = signal;
}
index++;
/* if(index == 5) PORTD |= 0x20; else PORTD &= ~0x20; // Servosignal an J3 anlegen
if(index == 6) PORTD |= 0x10; else PORTD &= ~0x10; // Servosignal an J4 anlegen
if(index == 7) PORTD |= 0x08; else PORTD &= ~0x08; // Servosignal an J5 anlegen */
}
}
}
 
 
 
 
 
/branches/v0.60_MicroMag3_Nick666/v0.60/rc.h
0,0 → 1,29
/*#######################################################################################
Derkodieren eines RC Summen Signals
#######################################################################################*/
 
#ifndef _RC_H
#define _RC_H
 
#if defined (__AVR_ATmega32__)
#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
#endif
 
#if defined (__AVR_ATmega644__)
//#define TIMER_TEILER CK64
#define TIMER_RELOAD_VALUE 250
//#define TIMER_TEILER CK256 // bei 20MHz
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz
#endif
 
#define GAS PPM_in[2]
 
 
extern void rc_sum_init (void);
 
extern volatile int PPM_in[11];
extern volatile int PPM_diff[11]; // das diffenzierte Stick-Signal
extern volatile unsigned char NewPpmData;
 
#endif //_RC_H
/branches/v0.60_MicroMag3_Nick666/v0.60/timer0.c
0,0 → 1,121
#include "main.h"
 
volatile unsigned int CountMilliseconds = 0;
volatile static unsigned int tim_main;
volatile unsigned char UpdateMotor = 0;
volatile unsigned int beeptime = 0;
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) // 9,8kHz
{
static unsigned char cnt_1ms = 1,cnt = 0;
// TCNT0 -= 250;//TIMER_RELOAD_VALUE;
 
if(!cnt--)
{
cnt = 10;
cnt_1ms++;
cnt_1ms %= 2;
if(!cnt_1ms) UpdateMotor = 1;
CountMilliseconds++;
if(Timeout) Timeout--;
}
 
if(beeptime > 1)
{
beeptime--;
PORTD |= (1<<PD2);
}
else
PORTD &= ~(1<<PD2);
 
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) timer0_MM3(); // Kompass auslesen
}
 
 
void Timer_Init(void)
{
tim_main = SetDelay(10);
TCCR0B = CK8;
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM
OCR0A = 0;
OCR0B = 120;
//TCNT0 = -TIMER_RELOAD_VALUE; // reload
//OCR1 = 0x00;
 
TCCR2A=(1<<COM2A1)|(1<<COM2A0)|3;
TCCR2B=(0<<CS20)|(1<<CS21)|(1<<CS22);
// TIMSK2 |= _BV(TOIE2);
TIMSK2 |= _BV(OCIE2A);
 
TIMSK0 |= _BV(TOIE0);
OCR2A = 10;
TCNT2 = 0;
}
 
// -----------------------------------------------------------------------
 
unsigned int SetDelay (unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(CountMilliseconds + t + 1);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
char CheckDelay(unsigned int t)
{
// TIMSK0 &= ~_BV(TOIE0);
return(((t - CountMilliseconds) & 0x8000) >> 9);
// TIMSK0 |= _BV(TOIE0);
}
 
// -----------------------------------------------------------------------
void Delay_ms(unsigned int w)
{
unsigned int akt;
akt = SetDelay(w);
while (!CheckDelay(akt));
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Servo ansteuern
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(SIG_OUTPUT_COMPARE2A)
{
static unsigned char timer = 10;
if(!timer--)
{
TCCR2A=(1<<COM2A1)|(0<<COM2A0)|3;
ServoValue = Parameter_ServoNickControl;
if(EE_Parameter.ServoNickCompInvert & 0x01) ServoValue += ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
else ServoValue -= ((long) EE_Parameter.ServoNickComp * (IntegralNick / 128)) / 512;
if(ServoValue < EE_Parameter.ServoNickMin) ServoValue = EE_Parameter.ServoNickMin;
else if(ServoValue > EE_Parameter.ServoNickMax) ServoValue = EE_Parameter.ServoNickMax;
 
//DebugOut.Analog[10] = ServoValue;
OCR2A = ServoValue;// + 75;
timer = EE_Parameter.ServoNickRefresh;
}
else
{
TCCR2A =3;
PORTD&=~0x80;
}
}
/branches/v0.60_MicroMag3_Nick666/v0.60/timer0.h
0,0 → 1,13
 
#define TIMER_TEILER CK8
#define TIMER_RELOAD_VALUE 250
 
void Timer_Init(void);
void Delay_ms(unsigned int);
unsigned int SetDelay (unsigned int t);
char CheckDelay (unsigned int t);
 
extern volatile unsigned int CountMilliseconds;
extern volatile unsigned char UpdateMotor;
extern volatile unsigned int beeptime;
extern int ServoValue;
/branches/v0.60_MicroMag3_Nick666/v0.60/twimaster.c
0,0 → 1,131
/*############################################################################
############################################################################*/
 
#include "main.h"
 
unsigned char twi_state = 0;
unsigned char motor = 0;
unsigned char motorread = 0;
unsigned char motor_rx[8];
 
//############################################################################
//Initzialisieren der I2C (TWI) Schnittstelle
void i2c_init(void)
//############################################################################
{
TWSR = 0;
TWBR = ((SYSCLK/SCL_CLOCK)-16)/2;
}
 
//############################################################################
//Start I2C
char i2c_start(void)
//############################################################################
{
TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
void i2c_stop(void)
//############################################################################
{
TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);
}
 
//############################################################################
//Start I2C
char i2c_write_byte(char byte)
//############################################################################
{
TWSR = 0x00;
TWDR = byte;
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);
return(0);
}
 
//############################################################################
//Start I2C
SIGNAL (TWI_vect)
//############################################################################
{
switch (twi_state++)
{
case 0:
i2c_write_byte(0x52+(motor*2));
break;
case 1:
switch(motor++)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 2:
i2c_stop();
if (motor<4) twi_state = 0;
else motor = 0;
i2c_start();
break;
//Liest Daten von Motor
case 3:
i2c_write_byte(0x53+(motorread*2));
break;
case 4:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 5: //1 Byte vom Motor lesen
motor_rx[motorread] = TWDR;
case 6:
switch(motorread)
{
case 0:
i2c_write_byte(Motor_Vorne);
break;
case 1:
i2c_write_byte(Motor_Hinten);
break;
case 2:
i2c_write_byte(Motor_Rechts);
break;
case 3:
i2c_write_byte(Motor_Links);
break;
}
break;
case 7: //2 Byte vom Motor lesen
motor_rx[motorread+4] = TWDR;
motorread++;
if (motorread>3) motorread=0;
i2c_stop();
twi_state = 0;
}
}
/branches/v0.60_MicroMag3_Nick666/v0.60/twimaster.h
0,0 → 1,32
/*############################################################################
############################################################################*/
 
#ifndef _I2C_MASTER_H
#define _I2C_MASTER_H
 
//############################################################################
 
// I2C Konstanten
#define SCL_CLOCK 200000L
#define I2C_TIMEOUT 30000
#define I2C_START 0x08
#define I2C_REPEATED_START 0x10
#define I2C_TX_SLA_ACK 0x18
#define I2C_TX_DATA_ACK 0x28
#define I2C_RX_SLA_ACK 0x40
#define I2C_RX_DATA_ACK 0x50
 
//############################################################################
 
extern unsigned char twi_state;
extern unsigned char motor;
extern unsigned char motorread;
extern unsigned char motor_rx[8];
 
 
void i2c_init (void); // I2C initialisieren
char i2c_start (void); // Start I2C
void i2c_stop (void); // Stop I2C
char i2c_write_byte (char byte); // 1 Byte schreiben
 
#endif
/branches/v0.60_MicroMag3_Nick666/v0.60/uart.c
0,0 → 1,328
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#include "main.h"
#include "uart.h"
 
unsigned char DebugGetAnforderung = 0,DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0;
unsigned volatile char SioTmp = 0;
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NMEABuffer[MAX_EMPFANGS_BUFF];
unsigned volatile char NeuerDatensatzEmpfangen = 0;
unsigned volatile char NeueKoordinateEmpfangen = 0;
unsigned volatile char UebertragungAbgeschlossen = 1;
unsigned volatile char CntCrcError = 0;
unsigned volatile char AnzahlEmpfangsBytes = 0;
unsigned volatile char PC_DebugTimeout = 0;
unsigned char PcZugriff = 100;
unsigned char MotorTest[4] = {0,0,0,0};
unsigned char MeineSlaveAdresse;
struct str_DebugOut DebugOut;
struct str_Debug DebugIn;
struct str_VersionInfo VersionInfo;
int Debug_Timer;
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Sende-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_TX)
{
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
{
ptr++; // die [0] wurde schon gesendet
tmp_tx = SendeBuffer[ptr];
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
{
ptr = 0;
UebertragungAbgeschlossen = 1;
}
UDR = tmp_tx;
}
else ptr = 0;
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX)
{
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
 
SioTmp = UDR;
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{
UartState = 0;
crc -= RxdBuffer[buf_ptr-2];
crc -= RxdBuffer[buf_ptr-1];
crc %= 4096;
crc1 = '=' + crc / 64;
crc2 = '=' + crc % 64;
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;};
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
{
NeuerDatensatzEmpfangen = 1;
AnzahlEmpfangsBytes = buf_ptr;
RxdBuffer[buf_ptr] = '\r';
if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
}
}
else
switch(UartState)
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
crc = SioTmp;
break;
case 1: // Adresse auswerten
UartState++;
RxdBuffer[buf_ptr++] = SioTmp;
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
else UartState = 0;
crc += SioTmp;
break;
default:
UartState = 0;
break;
}
}
 
 
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += SendeBuffer[i];
}
tmpCRC %= 4096;
SendeBuffer[i++] = '=' + tmpCRC / 64;
SendeBuffer[i++] = '=' + tmpCRC % 64;
SendeBuffer[i++] = '\r';
UebertragungAbgeschlossen = 0;
UDR = SendeBuffer[0];
}
 
 
 
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
SendeBuffer[pt++] = '#'; // Startzeichen
SendeBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
SendeBuffer[pt++] = cmd; // Commando
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
SendeBuffer[pt++] = '=' + (a >> 2);
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
SendeBuffer[pt++] = '=' + ( c & 0x3f);
}
AddCRC(pt);
}
 
 
// --------------------------------------------------------------------------
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer
{
unsigned char a,b,c,d;
unsigned char ptr = 0;
unsigned char x,y,z;
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
 
if(len--) ptrOut[ptr++] = x; else break;
if(len--) ptrOut[ptr++] = y; else break;
if(len--) ptrOut[ptr++] = z; else break;
}
 
}
 
// --------------------------------------------------------------------------
void BearbeiteRxDaten(void)
{
if(!NeuerDatensatzEmpfangen) return;
 
//unsigned int tmp_int_arr1[1];
//unsigned int tmp_int_arr2[2];
//unsigned int tmp_int_arr3[3];
unsigned char tmp_char_arr2[2];
//unsigned char tmp_char_arr3[3];
//unsigned char tmp_char_arr4[4];
//if(!MotorenEin)
PcZugriff = 255;
switch(RxdBuffer[2])
{
case 'c':// Debugdaten incl. Externe IOs usw
Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes);
/* for(unsigned char i=0; i<4;i++)
{
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]);
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8);
}*/
RemoteTasten |= DebugIn.RemoteTasten;
DebugDataAnforderung = 1;
break;
 
case 'h':// x-1 Displayzeilen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
RemoteTasten |= tmp_char_arr2[0];
DebugDisplayAnforderung = 1;
break;
case 't':// Motortest
Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes);
break;
case 'v': // Version-Anforderung und Ausbaustufe
GetVersionAnforderung = 1;
break;
case 'g':// "Get"-Anforderung für Debug-Daten
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
DebugGetAnforderung = 1;
break;
case 'q':// "Get"-Anforderung für Settings
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
Decode64((unsigned char *) &tmp_char_arr2[0],sizeof(tmp_char_arr2),3,AnzahlEmpfangsBytes);
if(tmp_char_arr2[0] != 0xff)
{
if(tmp_char_arr2[0] > 5) tmp_char_arr2[0] = 5;
ReadParameterSet(tmp_char_arr2[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], sizeof(struct mk_param_struct));
SendOutData('L' + tmp_char_arr2[0] -1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],sizeof(struct mk_param_struct));
}
else
SendOutData('L' + GetActiveParamSetNumber()-1,MeineSlaveAdresse,(unsigned char *) &EE_Parameter.Kanalbelegung[0],sizeof(struct mk_param_struct));
break;
case 'l':
case 'm':
case 'n':
case 'o':
case 'p': // Parametersatz speichern
Decode64((unsigned char *) &EE_Parameter.Kanalbelegung[0],sizeof(struct mk_param_struct),3,AnzahlEmpfangsBytes);
WriteParameterSet(RxdBuffer[2] - 'l' + 1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], sizeof(struct mk_param_struct));
eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], RxdBuffer[2] - 'l' + 1); // aktiven Datensatz merken
Piep(GetActiveParamSetNumber());
break;
}
// DebugOut.AnzahlZyklen = Debug_Timer_Intervall;
NeuerDatensatzEmpfangen = 0;
}
 
//############################################################################
//Routine für die Serielle Ausgabe
int uart_putchar (char c)
//############################################################################
{
if (c == '\n')
uart_putchar('\r');
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(USR, UDRE);
//Ausgabe des Zeichens
UDR = c;
return (0);
}
 
// --------------------------------------------------------------------------
void WriteProgramData(unsigned int pos, unsigned char wert)
{
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert;
// else eeprom_write_byte(&EE_Buffer[pos], wert);
// Buffer[pos] = wert;
}
 
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
 
UCR=(1 << TXEN) | (1 << RXEN);
// UART Double Speed (U2X)
USR |= (1<<U2X);
// RX-Interrupt Freigabe
UCSRB |= (1<<RXCIE);
// TX-Interrupt Freigabe
UCSRB |= (1<<TXCIE);
 
//Teiler wird gesetzt
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1);
//UBRR = 33;
//öffnet einen Kanal für printf (STDOUT)
//fdevopen (uart_putchar, 0);
//sbi(PORTD,4);
Debug_Timer = SetDelay(200);
}
 
//---------------------------------------------------------------------------------------------
void DatenUebertragung(void)
{
static char dis_zeile = 0;
if(!UebertragungAbgeschlossen) return;
 
if(DebugGetAnforderung && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
{
SendOutData('G',MeineSlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn));
DebugGetAnforderung = 0;
}
 
if((CheckDelay(Debug_Timer) || DebugDataAnforderung) && UebertragungAbgeschlossen)
{
SendOutData('D',MeineSlaveAdresse,(unsigned char *) &DebugOut,sizeof(DebugOut));
DebugDataAnforderung = 0;
Debug_Timer = SetDelay(MIN_DEBUG_INTERVALL);
}
 
if(DebugDisplayAnforderung && UebertragungAbgeschlossen)
{
Menu();
DebugDisplayAnforderung = 0;
if(++dis_zeile == 4) dis_zeile = 0;
SendOutData('0' + dis_zeile,0,&DisplayBuff[20 * dis_zeile],20); // DisplayZeile übertragen
}
if(GetVersionAnforderung && UebertragungAbgeschlossen)
{
SendOutData('V',MeineSlaveAdresse,(unsigned char *) &VersionInfo,sizeof(VersionInfo));
GetVersionAnforderung = 0;
}
 
}
 
/branches/v0.60_MicroMag3_Nick666/v0.60/uart.h
0,0 → 1,95
#ifndef _UART_H
#define _UART_H
 
#define MAX_SENDE_BUFF 150
#define MAX_EMPFANGS_BUFF 150
 
void BearbeiteRxDaten(void);
 
extern unsigned char DebugGetAnforderung;
extern unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
extern unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
extern unsigned volatile char UebertragungAbgeschlossen;
extern unsigned volatile char PC_DebugTimeout;
extern unsigned volatile char NeueKoordinateEmpfangen;
extern unsigned char MeineSlaveAdresse;
extern unsigned char PcZugriff;
extern int Debug_Timer;
extern void UART_Init (void);
extern int uart_putchar (char c);
extern void boot_program_page (uint32_t page, uint8_t *buf);
extern void DatenUebertragung(void);
extern void DecodeNMEA(void);
extern unsigned char MotorTest[4];
struct str_DebugOut
{
unsigned char Digital[13];
unsigned int AnzahlZyklen;
unsigned int Zeit;
unsigned char Sekunden;
unsigned int Analog[16]; // Debugwerte
};
 
extern struct str_DebugOut DebugOut;
 
struct str_Debug
{
unsigned char Digital[2];
unsigned char RemoteTasten;
unsigned int Analog[4];
};
extern struct str_Debug DebugIn;
 
struct str_VersionInfo
{
unsigned char Hauptversion;
unsigned char Nebenversion;
unsigned char PCKompatibel;
unsigned char Rserved[7];
};
extern struct str_VersionInfo VersionInfo;
 
//Die Baud_Rate der Seriellen Schnittstelle ist 9600 Baud
//#define BAUD_RATE 9600 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 14400 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 28800 //Baud Rate für die Serielle Schnittstelle
//#define BAUD_RATE 38400 //Baud Rate für die Serielle Schnittstelle
#define BAUD_RATE 57600 //Baud Rate für die Serielle Schnittstelle
 
//Anpassen der seriellen Schnittstellen Register wenn ein ATMega128 benutzt wird
#if defined (__AVR_ATmega128__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICRB
#endif
 
#if defined (__AVR_ATmega32__)
# define USR UCSRA
# define UCR UCSRB
# define UBRR UBRRL
# define EICR EICRB
# define INT_VEC_RX SIG_UART_RECV
# define INT_VEC_TX SIG_UART_TRANS
#endif
 
#if defined (__AVR_ATmega644__)
# define USR UCSR0A
# define UCR UCSR0B
# define UDR UDR0
# define UBRR UBRR0L
# define EICR EICR0B
# define TXEN TXEN0
# define RXEN RXEN0
# define RXCIE RXCIE0
# define TXCIE TXCIE0
# define U2X U2X0
# define UCSRB UCSR0B
# define UDRE UDRE0
# define INT_VEC_RX SIG_USART_RECV
# define INT_VEC_TX SIG_USART_TRANS
#endif
 
 
#endif //_UART_H
/branches/v0.60_MicroMag3_Nick666/v0.60/version.txt
0,0 → 1,49
 
-------
V0.53 27.04.2007 H.Buss
- erste öffentliche Version
 
V0.53b 29.04.2007 H.Buss
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft
 
V0.53c 29.04.2007 H.Buss
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind.
Die angezeigten Werte waren nicht die Werte der Funke
 
V0.54 01.05.2007 H.Buss
- die Paramtersätze können jetzt vor dem Start ausgewählt werden
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt:
2 3 4
1 x 5
- - -
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw.
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt
 
V0.55 14.05.2007 H.Buss
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden
 
V0.56 14.05.2007 H.Buss
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen
V0.57 24.05.2007 H.Buss
- Der Höhenregler kann nun auch mittels Schalter bedient werden
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat
- Kompass-Einfluss dämpfen bei Neigung
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen
- Der Motortest vom Kopter-Tool geht jetzt
- Man kann den Parametersätzen einen Namen geben
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert
V0.58 30.05.2007 H.Buss
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist
 
V0.60 17.08.2007 H.Buss
- "Schwindel-Bug" behoben
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft
- Poti4 zugefügt
- Es werden jetzt 8 Kanäle ausgewertet
- Kamera-Servo (an J7)
- Die Settings müssen überschrieben werden