2002-09-18 Theodoare A. Roth
* configure.in(AM_INIT_AUTOMAKE): Bump version.
(AC_OUTPUT): Add doc/examples/Makefile.
* doc/Makefile.am: Move examples to SUBDIRS.
* doc/api/Makefile.am: New rules for demo project.
* doc/api/doxygen.config.in: Add paths to demo project.
* doc/examples/demo/Makefile: New file.
* doc/examples/demo/demo.c: New file.
* doc/examples/demo/demo.dox: New file.
* doc/examples/demo/demo.fig: New file.
Index: configure.in
===================================================================
RCS file: /cvsroot/avr-libc/avr-libc/configure.in,v
retrieving revision 1.24
diff -u -r1.24 configure.in
--- configure.in 11 Sep 2002 20:53:22 -0000 1.24
+++ configure.in 19 Sep 2002 00:50:26 -0000
@@ -122,7 +122,7 @@
dnl maybe the release number sould be changed to major.minor.bugfix
dnl (e.g.: 1.0.0) to be able to tell the users of the avr-libc if
dnl it is compatible to their current version or not.
-AM_INIT_AUTOMAKE(avr-libc, 20020911-cvs)
+AM_INIT_AUTOMAKE(avr-libc, 20020918-cvs)
dnl Use the AC_CHECK_TOOL macro to find also cross tools
AC_CHECK_TOOL(AS, as, as)
@@ -292,7 +292,8 @@
AC_OUTPUT(crt1/Makefile libc/Makefile libc/stdlib/Makefile
libc/pmstring/Makefile libc/string/Makefile libc/misc/Makefile
libm/Makefile libm/fplib/Makefile avr-libc.spec
- doc/Makefile doc/api/Makefile doc/api/doxygen.config
+ doc/Makefile doc/examples/Makefile
+ doc/api/Makefile doc/api/doxygen.config
Makefile,
[if test -n "$CONFIG_FILES"; then
. ${avrlib_basedir}/config-ml.in
Index: doc/Makefile.am
===================================================================
RCS file: /cvsroot/avr-libc/avr-libc/doc/Makefile.am,v
retrieving revision 1.1
diff -u -r1.1 Makefile.am
--- doc/Makefile.am 16 Jul 2002 20:11:37 -0000 1.1
+++ doc/Makefile.am 19 Sep 2002 00:50:27 -0000
@@ -33,9 +33,8 @@
MAINTAINERCLEANFILES = Makefile.in
-SUBDIRS = api
-DIST_SUBDIRS = api
+SUBDIRS = examples api
+DIST_SUBDIRS = examples api
EXTRA_DIST = CHANGES.old ChangeLog INSTALL TODO \
- avr-libc-reference.html examples register-usage.txt
-
+ avr-libc-reference.html register-usage.txt
Index: doc/api/Makefile.am
===================================================================
RCS file: /cvsroot/avr-libc/avr-libc/doc/api/Makefile.am,v
retrieving revision 1.17
diff -u -r1.17 Makefile.am
--- doc/api/Makefile.am 3 Sep 2002 10:24:12 -0000 1.17
+++ doc/api/Makefile.am 19 Sep 2002 00:50:27 -0000
@@ -50,7 +50,12 @@
USER_MANUAL = @AVR_LIBC_USER_MANUAL@
-all-local: ps html pdf
+all-local: demo ps html pdf
+
+# Before we can build the dox, we need to build the demo project so that some
+# included files get generated.
+demo:
+ cd $(top_srcdir)/doc/examples/demo && ${MAKE} all dox
# Rule for generating postscript output.
ps: $(TARGET_DOX_PS)
@@ -69,6 +74,7 @@
clean-local:
rm -rf $(USER_MANUAL) latex_src latex_pdf_src man
+ cd $(top_srcdir)/doc/examples/demo && ${MAKE} clean
#
# Rules for generating documentation with doxygen
@@ -119,6 +125,10 @@
-e '/Signal Name/s/\\\\\\hline/\\endhead\\hline/' \
group__avr__interrupts.tex > tmp.$$ && \
mv -f tmp.$$ group__avr__interrupts.tex
+ cd latex_pdf_src && \
+ sed -e '/{demo.eps}/s/demo.eps/demo.pdf/' \
+ demo_project.tex > tmp.$$ && \
+ mv -f tmp.$$ demo_project.tex
doxygen-pdf.config: doxygen.config
sed \
Index: doc/api/doxygen.config.in
===================================================================
RCS file: /cvsroot/avr-libc/avr-libc/doc/api/doxygen.config.in,v
retrieving revision 1.7
diff -u -r1.7 doxygen.config.in
--- doc/api/doxygen.config.in 13 Aug 2002 23:22:20 -0000 1.7
+++ doc/api/doxygen.config.in 19 Sep 2002 00:50:27 -0000
@@ -333,7 +333,8 @@
INPUT = @top_srcdir@/include \
@top_srcdir@/libc \
@top_srcdir@/libm \
- @top_srcdir@/doc/api
+ @top_srcdir@/doc/api \
+ @top_srcdir@/doc/examples/demo
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
@@ -374,7 +375,7 @@
# directories that contain example code fragments that are included (see
# the \include command).
-EXAMPLE_PATH =
+EXAMPLE_PATH = @top_srcdir@/doc/examples/demo
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
@@ -394,7 +395,7 @@
# directories that contain image that are included in the documentation (see
# the \image command).
-IMAGE_PATH =
+IMAGE_PATH = @top_srcdir@/doc/examples/demo
# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
Index: doc/examples/demo/Makefile
===================================================================
RCS file: doc/examples/demo/Makefile
diff -N doc/examples/demo/Makefile
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ doc/examples/demo/Makefile 19 Sep 2002 00:50:27 -0000
@@ -0,0 +1,85 @@
+PRG = demo
+OBJ = demo.o
+MCU_TARGET = at90s2313
+OPTIMIZE = -O2
+
+# You should not have to change anything below here.
+
+CC = avr-gcc
+
+# roOverride is only needed by avr-lib build system.
+
+override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET)
+override LDFLAGS = -Wl,-Map,$(PRG).map
+
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+
+all: $(PRG).elf lst text eeprom
+
+$(PRG).elf: $(OBJ)
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
+
+clean:
+ rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak
+ rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)
+
+lst: $(PRG).lst
+
+%.lst: %.elf
+ $(OBJDUMP) -h -S $< > $@
+
+# Rules for building the .text rom images
+
+text: hex bin srec
+
+hex: $(PRG).hex
+bin: $(PRG).bin
+srec: $(PRG).srec
+
+%.hex: %.elf
+ $(OBJCOPY) -j .text -O ihex $< $@
+
+%.srec: %.elf
+ $(OBJCOPY) -j .text -O srec $< $@
+
+%.bin: %.elf
+ $(OBJCOPY) -j .text -O binary $< $@
+
+# Rules for building the .eeprom rom images
+
+eeprom: ehex ebin esrec
+
+ehex: $(PRG)_eeprom.hex
+ebin: $(PRG)_eeprom.bin
+esrec: $(PRG)_eeprom.srec
+
+%_eeprom.hex: %.elf
+ $(OBJCOPY) -j .eeprom -O ihex $< $@
+
+%_eeprom.srec: %.elf
+ $(OBJCOPY) -j .eeprom -O srec $< $@
+
+%_eeprom.bin: %.elf
+ $(OBJCOPY) -j .eeprom -O binary $< $@
+
+# Every thing below here is used by avr-libc's build system and can be ignored
+# by the casual user.
+
+FIG2DEV = fig2dev
+EXTRA_CLEAN_FILES = *.hex *.bin *.srec
+
+dox: eps png pdf
+
+eps: $(PRG).eps
+png: $(PRG).png
+pdf: $(PRG).pdf
+
+%.eps: %.fig
+ $(FIG2DEV) -L eps $< $@
+
+%.pdf: %.fig
+ $(FIG2DEV) -L pdf $< $@
+
+%.png: %.fig
+ $(FIG2DEV) -L png $< $@
Index: doc/examples/demo/demo.c
===================================================================
RCS file: doc/examples/demo/demo.c
diff -N doc/examples/demo/demo.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ doc/examples/demo/demo.c 19 Sep 2002 00:50:27 -0000
@@ -0,0 +1,104 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * wrote this file. As long as you retain this notice you
+ * can do whatever you want with this stuff. If we meet some day, and you think
+ * this stuff is worth it, you can buy me a beer in return. Joerg Wunsch
+ * ----------------------------------------------------------------------------
+ *
+ * Simple AVR demonstration. Controls a LED that can be directly
+ * connected from OC1/OC1A to GND. The brightness of the LED is
+ * controlled with the PWM. After each period of the PWM, the PWM
+ * value is either incremented or decremented, that's all.
+ *
+ * $Id: simple-demo.c,v 1.3 2002/02/11 19:51:51 j Exp $
+ */
+
+#include
+#include
+#include
+#include
+
+#if defined(__AVR_AT90S2313__)
+# define OC1 PB3
+# define OCR OCR1
+# define DDROC DDRB
+#elif defined(__AVR_AT90S2333__) || defined(__AVR_AT90S4433__)
+# define OC1 PB1
+# define DDROC DDRB
+# define OCR OCR1
+#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || \
+ defined(__AVR_AT90S4434__) || defined(__AVR_AT90S8535__) || \
+ defined(__AVR_ATmega163__)
+# define OC1 PD5
+# define DDROC DDRD
+# define OCR OCR1A
+#else
+# error "Don't know what kind of MCU you are compiling for"
+#endif
+
+#if defined(COM11)
+# define XCOM11 COM11
+#elif defined(COM1A1)
+# define XCOM11 COM1A1
+#else
+# error "need either COM1A1 or COM11"
+#endif
+
+enum { UP, DOWN };
+
+volatile uint16_t pwm; /* Note [1] */
+volatile uint8_t direction;
+
+SIGNAL (SIG_OVERFLOW1) /* Note [2] */
+{
+ switch (direction) /* Note [3] */
+ {
+ case UP:
+ if (++pwm == 1023)
+ direction = DOWN;
+ break;
+
+ case DOWN:
+ if (--pwm == 0)
+ direction = UP;
+ break;
+ }
+
+ OCR = pwm; /* Note [4] */
+}
+
+void
+ioinit (void) /* Note [5] */
+{
+ /* tmr1 is 10-bit PWM */
+ TCCR1A = _BV (PWM10) | _BV (PWM11) | _BV (XCOM11);
+
+ /* tmr1 running on full MCU clock */
+ TCCR1B = _BV (CS10);
+
+ /* set PWM value to 0 */
+ OCR = 0;
+
+ /* enable OC1 and PB2 as output */
+ DDROC = _BV (OC1);
+
+ timer_enable_int (_BV (TOIE1));
+
+ /* enable interrupts */
+ sei ();
+
+}
+
+int
+main (void)
+{
+ ioinit ();
+
+ /* loop forever, the interrupts are doing the rest */
+
+ for (;;) /* Note [6] */
+ ;
+
+ return (0);
+}
Index: doc/examples/demo/demo.dox
===================================================================
RCS file: doc/examples/demo/demo.dox
diff -N doc/examples/demo/demo.dox
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ doc/examples/demo/demo.dox 19 Sep 2002 00:50:27 -0000
@@ -0,0 +1,237 @@
+/* Copyright (c) 2002, Theodore Roth
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * 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.
+
+ 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. */
+
+/* $Id: sections.dox,v 1.3 2002/09/02 15:42:19 joerg_wunsch Exp $ */
+
+/** \page demo_project Using the GNU Tools: A simple project
+
+At this point, you should have the GNU tools configured, built, and installed
+on your system. In this chapter, we present a simple example of using the GNU
+tools in an AVR project. After reading this chapter, you should have a better
+feel as to how the tools are used and how a \c Makefile can be configured.
+
+\subsection demo_project_desc The Project
+
+This project will use the pulse-width modulator ( \c PWM ) to ramp an LED on
+and off every two seconds. An AT90S2313 processor will be used as the
+controller. The circuit for this demonstration is shown in the
+\ref demo_project_schematic "schematic diagram". If you have a development
+kit, you should be able to use it, rather than build the circuit, for this
+project.
+
+\anchor demo_project_schematic
+\image html demo.png "Schematic of circuit for demo project"
+\image latex demo.eps "Schematic of circuit for demo project" width=4in
+
+The source code is given in \ref demo_project_src "demo.c". For the sake of
+this example, create a file called \c demo.c containing this source code.
+Some of the more important parts of the code are:
+
+\par Note [1]:
+The \c PWM is being used in 10-bit mode, so we need a 16-bit variable to
+remember the current value.
+
+\par Note [2]:
+SIGNAL() is a macro that marks the function as an interrupt routine. In this
+case, the function will get called when the timer overflows. Setting up
+interrupts is explained in greater detail in \c ref avr_interrupts.
+
+\par Note [3]:
+ This section determines the new value of the \c PWM.
+
+\par Note [4]:
+Here's where the newly computed value is loaded into the \c PWM regsiter.
+Since we are in an interrupt routine, it is safe to use outw(). Outside of an
+interrupt, outw_atomic() should be used. [FIXME: this is old stuff]
+
+\par Note [5]:
+This routine gets called after a reset. It initializes the \c PWM and enables
+interrupts.
+
+\par Note [6]:
+The main loop of the program does nothing -- all the work is done by the
+interrupt routine! If this was a real product, we'd probably put a \c SLEEP
+instruction in this loop to conserve power.
+
+\subsection demo_project_src The Source Code
+
+\include demo.c
+
+\subsection demo_project_compile Compiling and Linking
+
+This first thing that needs to be done is compile the source. When compiling,
+the compiler needs to know the processor type so the \c -mmcu option is
+specified. The \c -Os option will tell the compiler to optimize the code for
+efficient space usage (at the possible expense of code execution speed). The
+\c -g is used to embed debug info. The debug info is useful for disassemblies
+and doesn't end up in the \c .hex files, so I usually specify it. Finally, the
+\c -c tells the compiler to compile and stop -- don't link. This demo is small
+enough that we could compile and link in one step. However, real-world
+projects will have several modules and will typically need to break up the
+building of the project into several compiles and one link.
+
+\verbatim
+ $ avr-gcc -g -Os -mmcu=at90s2333 -c demo.c
+\endverbatim
+
+The compilation will create a \c demo.o file. Next we link it into a binary
+called \c demo.elf.
+
+\verbatim
+ $ avr-gcc -g -mmcu=at90s2333 -o demo.elf demo.o
+\endverbatim
+
+It is important to specify the MCU type when linking. The compiler uses the \c
+-mmcu option to choose start-up files and run-time libraries that get linked
+together. If this option isn't specified, the compiler defaults to the 8515
+processor environment, which is most certainly what you didn't want.
+
+\subsection demo_project_obj Examining the Object File
+
+\addindex disassembling
+
+Now we have a binary file. Can we do anything useful with it (besides put it
+into the processor?) The GNU Binutils suite is made up of many useful tools
+for manipulating object files that get generated. One tool is \c avr-objdump,
+which takes information from the object file and displays it in many useful
+ways. Typing the command by itself will cause it to list out its
+options.
+
+For instance, to get a feel of the application's size, the \c -h option can be
+used. The output of this option shows how much space is used in each of the
+sections (the \c .stab and \c .stabstr sections hold the debugging information
+and won't make it into the ROM file).
+
+An even more useful option is \c -S. This option disassembles the binary file
+and intersperses the source code in the output! This method is much better, in
+my opinion, than using the \c -S with the compiler because this listing
+includes routines from the libraries and the vector table contents. Also, all
+the "fix-ups" have been satisfied. In other words, the listing generated by
+this option reflects the actual code that the processor will run.
+
+\verbatim
+ $ avr-objdump -h -S demo.elf > demo.lst
+\endverbatim
+
+Here's the output as saved in the \c demo.lst file:
+
+\verbinclude demo.lst
+
+\subsection demo_project_map Linker Map Files
+
+\c avr-objdump is very useful, but sometimes it's necessary to see information
+about the link that can only be generated by the linker. A map file contains
+this information. A map file is useful for monitoring the sizes of your code
+and data. It also shows where modules are loaded and which modules were loaded
+from libraries. It is yet another view of your application. To get a map file,
+I usually add -Wl,-Map,demo.map to my link command. Relink the
+application using the following command to generate \c demo.map (a portion of
+which is shown below).
+
+\verbatim
+ $ avr-gcc -g -mmcu=at90s2313 -Wl,-Map,demo.map -o demo.elf demo.o
+\endverbatim
+
+\dontinclude demo.map
+
+Some points of interest in the \c demo.map file are:
+
+\skip .rela.plt
+\until __ctors_start
+
+The \c .text segment (where program instructions are stored) starts at
+location 0x0.
+
+\skipline *(.fini2)
+\until __eeprom_end
+
+The last address in the \c .text segment is location \c 0xf2 ( denoted by \c
+_etext ), so the instructions use up 242 bytes of FLASH.
+
+The \c .data segment (where initialized static variables are stored) starts
+at location \c 0x60, which is the first address after the register bank on a
+2313 processor.
+
+The next available address in the \c .data segment is also location \c 0x60,
+so the application has no initialized data.
+
+The \c .bss segment (where uninitialized data is stored) starts at location
+\c 0x60.
+
+The next available address in the \c .bss segment is location 0x63, so the
+application uses 3 bytes of uninitialized data.
+
+The \c .eeprom segment (where EEPROM variables are stored) starts at
+location 0x0.
+
+The next available address in the \c .eeprom segment is also location 0x0,
+so there aren't any EEPROM variables.
+
+\subsection Generating Intel Hex Files
+
+We have a binary of the application, but how do we get it into the processor?
+Most (if not all) programmers will not accept a GNU executable as an input
+file, so we need to do a little more processing. The next step is to extract
+portions of the binary and save the information into \c .hex files. The GNU
+utility that does this is called \c avr-objcopy.
+
+The ROM contents can be pulled from our project's binary and put into the file
+demo.hex using the following command:
+
+\verbatim
+ $ avr-objcopy -j .text -O ihex demo.elf demo.hex
+\endverbatim
+
+The resulting \c demo.hex file contains:
+
+\verbinclude demo.hex
+
+The \c -j option indicates that we want the information from the \c .text
+segment extracted. If we specify the EEPROM segment, we can generate a \c .hex
+file that can be used to program the EEPROM:
+
+\verbatim
+ $ avr-objcopy -j .eeprom -O ihex demo.elf demo_eeprom.hex
+\endverbatim
+
+The resulting \c demo_eeprom.hex file contains:
+
+\verbinclude demo_eeprom.hex
+
+which is an empty \c .hex file (which is expected, since we didn't define any
+EEPROM variables).
+
+\subsection Letting Make Build the Project
+
+Rather than type these commands over and over, they can all be placed in a
+make file. To build the demo project using \c make,
+save the following in a file called \c Makefile.
+
+\note This \c Makefile can only be used as input for the GNU version of \c
+make.
+
+\include demo/Makefile
+
+*/
Index: doc/examples/demo/demo.fig
===================================================================
RCS file: doc/examples/demo/demo.fig
diff -N doc/examples/demo/demo.fig
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ doc/examples/demo/demo.fig 19 Sep 2002 00:50:27 -0000
@@ -0,0 +1,225 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+0 32 #727272
+1 4 0 1 18 7 50 0 -1 0.000 1 0.0000 4275 2250 75 75 4350 2250 4200 2250
+1 3 0 1 12 12 49 0 20 0.000 1 0.0000 2400 3750 40 40 2400 3750 2440 3750
+1 3 0 1 12 12 49 0 20 0.000 1 0.0000 1200 3525 40 40 1200 3525 1240 3525
+1 3 0 1 12 12 49 0 20 0.000 1 0.0000 1200 2250 40 40 1200 2250 1240 2250
+1 3 0 1 12 12 49 0 20 0.000 1 0.0000 2400 2250 40 40 2400 2250 2440 2250
+1 3 0 1 12 12 49 0 20 0.000 1 0.0000 2400 2775 40 40 2400 2775 2440 2775
+1 3 0 1 12 12 49 0 20 0.000 1 0.0000 2400 3150 40 40 2400 3150 2440 3150
+1 3 0 1 12 12 49 0 20 0.000 1 0.0000 3675 3150 40 40 3675 3150 3715 3150
+1 3 0 1 12 12 49 0 20 0.000 1 0.0000 3675 2775 40 40 3675 2775 3715 2775
+2 2 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 5
+ 4350 1950 6300 1950 6300 5550 4350 5550 4350 1950
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 4200 2250 3900 2250
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 4350 2775 3900 2775
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 4350 3150 3900 3150
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 4350 3525 3900 3525
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 4350 3750 3900 3750
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 5400 6750 5400
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 5175 6750 5175
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 4950 6750 4950
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 4725 6750 4725
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 4500 6750 4500
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 4275 6750 4275
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 4050 6750 4050
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 3675 6750 3675
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 3450 6750 3450
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 3225 6750 3225
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 3000 6750 3000
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 2775 6750 2775
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 2550 6750 2550
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 2325 6750 2325
+2 1 0 1 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 6300 2100 6750 2100
+2 1 0 1 18 12 50 0 -1 0.000 1 0 -1 0 0 2
+ 3671 2876 3675 2775
+2 1 0 2 18 12 50 0 -1 0.000 1 0 -1 0 0 2
+ 3484 3036 3859 3036
+2 1 0 2 18 12 50 0 -1 0.000 1 0 -1 0 0 2
+ 3487 2873 3859 2873
+2 1 0 1 12 7 49 0 -1 0.000 0 0 7 0 0 3
+ 7875 3000 8250 3000 8250 3150
+2 1 0 1 12 7 49 0 -1 0.000 0 0 7 0 0 2
+ 6750 3000 7275 3000
+2 1 0 1 12 7 49 0 -1 0.000 0 0 7 0 0 2
+ 3900 3525 1200 3525
+2 1 0 1 12 7 49 0 -1 0.000 0 0 7 0 0 2
+ 2400 3750 3900 3750
+2 1 0 1 12 7 49 0 -1 0.000 0 0 7 0 0 2
+ 2400 2775 2400 3975
+2 1 0 1 12 12 49 0 -1 0.000 0 0 7 0 0 2
+ 3075 3150 3900 3150
+2 1 0 1 12 12 49 0 -1 0.000 0 0 7 0 0 2
+ 3525 2775 3900 2775
+2 1 0 1 12 12 49 0 -1 0.000 0 0 7 0 0 2
+ 2250 2250 3900 2250
+2 1 0 1 12 12 49 0 -1 0.000 0 0 7 0 0 2
+ 2550 3150 2400 3150
+2 1 0 1 12 12 49 0 -1 0.000 0 0 7 0 0 2
+ 3000 2775 2400 2775
+2 1 0 1 12 12 49 0 -1 0.000 0 0 7 0 0 2
+ 1200 4275 1200 4500
+2 1 0 1 12 12 49 0 -1 0.000 0 0 7 0 0 2
+ 1200 1950 1200 3750
+2 1 0 1 12 12 49 0 -1 0.000 0 0 7 0 0 2
+ 1200 2250 1350 2250
+2 1 0 1 18 12 50 0 -1 0.000 1 0 -1 0 0 2
+ 3675 3036 3675 3150
+2 4 0 2 18 12 50 0 -1 0.000 1 0 3 0 0 5
+ 3847 2918 3495 2918 3495 2993 3847 2993 3847 2918
+2 1 0 1 18 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 1200 4500 1200 4725
+2 1 0 3 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 1050 4725 1350 4725
+2 1 0 1 18 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 2400 3975 2400 4200
+2 1 0 3 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 2250 4200 2550 4200
+2 1 0 1 18 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 1200 3750 1200 3975
+2 1 0 3 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 1050 3975 1350 3975
+2 1 0 3 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 1050 4050 1350 4050
+2 1 0 1 18 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 1200 4050 1200 4275
+2 1 0 3 18 7 50 0 -1 0.000 1 0 -1 0 0 3
+ 1050 1800 1200 1650 1350 1800
+2 1 0 1 18 7 50 0 -1 0.000 1 0 -1 0 0 2
+ 1200 1650 1200 1950
+2 1 0 1 18 7 50 0 -1 0.000 1 0 -1 0 0 2
+ 1950 2250 2250 2250
+2 2 0 2 18 7 50 0 -1 0.000 1 0 -1 0 0 5
+ 1650 2175 1950 2175 1950 2325 1650 2325 1650 2175
+2 1 0 1 18 7 50 0 -1 0.000 1 0 -1 0 0 2
+ 1650 2250 1350 2250
+2 1 0 1 18 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 2400 2250 2400 2475
+2 1 0 3 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 2250 2475 2550 2475
+2 1 0 3 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 2250 2550 2550 2550
+2 1 0 1 18 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 2400 2550 2400 2775
+2 1 0 1 18 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 3525 2775 3300 2775
+2 1 0 3 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 3300 2625 3300 2925
+2 1 0 3 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 3225 2625 3225 2925
+2 1 0 1 18 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 3225 2775 3000 2775
+2 1 0 1 18 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 3075 3150 2850 3150
+2 1 0 3 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 2850 3000 2850 3300
+2 1 0 3 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 2775 3000 2775 3300
+2 1 0 1 18 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 2775 3150 2550 3150
+2 1 0 2 18 7 50 0 -1 0.000 1 0 -1 0 0 4
+ 7500 2925 7500 3075 7650 3000 7500 2925
+2 1 0 2 18 7 50 0 -1 0.000 1 0 -1 0 0 2
+ 7650 2925 7650 3075
+2 1 0 1 18 7 50 0 -1 0.000 1 0 -1 0 0 2
+ 7500 3000 7275 3000
+2 1 0 1 18 7 50 0 -1 0.000 1 0 -1 0 0 2
+ 7650 3000 7875 3000
+2 1 0 1 18 7 50 0 -1 0.000 1 0 -1 1 0 2
+ 1 1 1.00 60.00 90.00
+ 7500 3150 7650 3300
+2 1 0 1 18 7 50 0 -1 0.000 1 0 -1 1 0 2
+ 1 1 1.00 60.00 90.00
+ 7575 3150 7725 3300
+2 1 0 1 18 7 50 0 -1 0.000 0 0 -1 0 0 2
+ 8250 3150 8250 3375
+2 1 0 3 18 7 50 0 -1 0.000 0 0 7 0 0 2
+ 8100 3375 8400 3375
+4 0 32 50 0 14 12 0.0000 4 135 315 4350 1875 IC1\001
+4 0 32 50 0 14 12 0.0000 4 135 105 4050 2250 1\001
+4 0 32 50 0 14 12 0.0000 4 135 210 4050 3750 10\001
+4 0 32 50 0 14 12 0.0000 4 135 210 4050 3525 20\001
+4 0 32 50 0 14 12 0.0000 4 135 105 4050 3150 5\001
+4 0 32 50 0 14 12 0.0000 4 135 105 4050 2775 4\001
+4 0 32 50 0 14 12 0.0000 4 135 210 6450 2100 19\001
+4 0 32 50 0 14 12 0.0000 4 135 210 6450 2325 18\001
+4 0 32 50 0 14 12 0.0000 4 135 210 6450 2550 17\001
+4 0 32 50 0 14 12 0.0000 4 135 210 6450 2775 16\001
+4 0 32 50 0 14 12 0.0000 4 135 210 6450 3000 15\001
+4 0 32 50 0 14 12 0.0000 4 135 210 6450 3225 14\001
+4 0 32 50 0 14 12 0.0000 4 135 210 6450 3450 13\001
+4 0 32 50 0 14 12 0.0000 4 135 210 6450 3675 12\001
+4 0 32 50 0 14 12 0.0000 4 135 210 6450 4050 11\001
+4 0 32 50 0 14 12 0.0000 4 135 105 6450 4275 9\001
+4 0 32 50 0 14 12 0.0000 4 135 105 6450 4500 8\001
+4 0 32 50 0 14 12 0.0000 4 135 105 6450 4725 7\001
+4 0 32 50 0 14 12 0.0000 4 135 105 6450 4950 6\001
+4 0 32 50 0 14 12 0.0000 4 135 105 6450 5175 3\001
+4 0 32 50 0 14 12 0.0000 4 135 105 6450 5400 2\001
+4 1 32 50 0 14 12 0.0000 4 135 1050 5325 5700 AT90S2313P\001
+4 2 32 50 0 14 12 0.0000 4 165 840 6225 5475 (RXD)PD0\001
+4 2 32 50 0 14 12 0.0000 4 165 840 6225 5250 (TXD)PD1\001
+4 2 32 50 0 14 12 0.0000 4 165 945 6225 5025 (INT0)PD2\001
+4 2 32 50 0 14 12 0.0000 4 165 945 6225 4800 (INT1)PD3\001
+4 2 32 50 0 14 12 0.0000 4 165 735 6225 4575 (T0)PD4\001
+4 2 32 50 0 14 12 0.0000 4 165 735 6225 4350 (T1)PD5\001
+4 2 32 50 0 14 12 0.0000 4 165 840 6225 4125 (ICP)PD6\001
+4 2 32 50 0 14 12 0.0000 4 165 945 6225 3750 (AIN0)PB0\001
+4 2 32 50 0 14 12 0.0000 4 165 945 6225 3525 (AIN1)PB1\001
+4 2 32 50 0 14 12 0.0000 4 135 315 6225 3300 PB2\001
+4 2 32 50 0 14 12 0.0000 4 165 840 6225 3075 (OCI)PB3\001
+4 2 32 50 0 14 12 0.0000 4 135 315 6225 2850 PB4\001
+4 2 32 50 0 14 12 0.0000 4 165 945 6225 2400 (MISO)PB6\001
+4 2 32 50 0 14 12 0.0000 4 165 840 6225 2175 (SCK)PB7\001
+4 0 32 50 0 14 12 0.0000 4 120 525 4425 2325 RESET\001
+4 0 32 50 0 14 12 0.0000 4 135 525 4425 2850 XTAL2\001
+4 0 32 50 0 14 12 0.0000 4 135 525 4425 3225 XTAL1\001
+4 0 32 50 0 14 12 0.0000 4 120 315 4425 3600 VCC\001
+4 0 32 50 0 14 12 0.0000 4 120 315 4425 3825 GND\001
+4 2 32 50 0 14 12 0.0000 4 165 945 6225 2625 (MOSI)PB5\001
+4 0 32 50 0 14 12 1.5708 4 165 210 3600 2775 Q1\001
+4 0 32 50 0 14 12 1.5708 4 135 420 3900 2775 4mhz\001
+4 1 32 50 0 14 12 0.0000 4 120 315 1200 4950 GND\001
+4 1 32 50 0 14 12 0.0000 4 120 315 2400 4425 GND\001
+4 1 32 50 0 14 12 1.5708 4 135 420 1500 4050 .1uf\001
+4 1 32 50 0 14 12 1.5708 4 135 210 975 4050 C4\001
+4 1 32 50 0 14 12 0.0000 4 120 315 1200 1575 VCC\001
+4 1 32 50 0 14 12 0.0000 4 135 210 1800 2100 R1\001
+4 1 32 50 0 14 12 0.0000 4 135 315 1800 2550 20K\001
+4 1 32 50 0 14 12 1.5708 4 135 525 2700 2550 .01uf\001
+4 1 32 50 0 14 12 1.5708 4 135 210 2175 2550 C3\001
+4 1 32 50 0 14 12 0.0000 4 180 420 3225 3075 18pf\001
+4 1 32 50 0 14 12 0.0000 4 135 210 3225 2550 C2\001
+4 1 32 50 0 14 12 0.0000 4 180 420 2775 3450 18pf\001
+4 1 32 50 0 14 12 0.0000 4 135 210 2775 2925 C1\001
+4 1 32 50 0 14 12 0.0000 4 135 630 7575 2700 LED5MM\001
+4 1 32 50 0 14 12 0.0000 4 135 210 7575 2850 D1\001
+4 1 32 50 0 14 12 0.0000 4 120 315 8250 3600 GND\001