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