From 91744bc72004d68178bf152e1b1c7d68194cc099 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 17 Jul 2012 20:09:48 -0600 Subject: [PATCH] First commit, Working Version --- code/.gitignore | 46 + code/Makefile | 635 ++ code/src/AVC.c | 578 ++ code/src/AVC.h | 76 + code/src/AVC_MACROS.h | 205 + code/src/AVC_messages.c | 51 + code/src/AVC_messages.h | 71 + code/src/USART.c | 319 + code/src/USART.h | 36 + code/src/bluetooth.c | 129 + code/src/bluetooth.h | 20 + code/src/main.c | 38 + code/src/task_man.c | 158 + code/src/task_man.h | 33 + eagle/.gitignore | 33 + eagle/AVC-LAN-2.brd | 2778 +++++++ eagle/AVC-LAN-2.sch | 14460 ++++++++++++++++++++++++++++++++++++ eagle/Bluetunes.lbr | 495 ++ eagle/avr-7.lbr | Bin 0 -> 253699 bytes eagle/buckReg.lbr | Bin 0 -> 2071 bytes eagle/con-lumberg-mod.lbr | 6648 +++++++++++++++++ eagle/cstce-resonator.lbr | 267 + eagle/rcl-2.lbr | Bin 0 -> 316717 bytes eagle/supply.lbr | Bin 0 -> 24652 bytes eagle/supply0.lbr | Bin 0 -> 20526 bytes 25 files changed, 27076 insertions(+) create mode 100644 code/.gitignore create mode 100644 code/Makefile create mode 100644 code/src/AVC.c create mode 100644 code/src/AVC.h create mode 100644 code/src/AVC_MACROS.h create mode 100644 code/src/AVC_messages.c create mode 100644 code/src/AVC_messages.h create mode 100644 code/src/USART.c create mode 100644 code/src/USART.h create mode 100644 code/src/bluetooth.c create mode 100644 code/src/bluetooth.h create mode 100644 code/src/main.c create mode 100644 code/src/task_man.c create mode 100644 code/src/task_man.h create mode 100644 eagle/.gitignore create mode 100644 eagle/AVC-LAN-2.brd create mode 100644 eagle/AVC-LAN-2.sch create mode 100644 eagle/Bluetunes.lbr create mode 100644 eagle/avr-7.lbr create mode 100644 eagle/buckReg.lbr create mode 100644 eagle/con-lumberg-mod.lbr create mode 100644 eagle/cstce-resonator.lbr create mode 100644 eagle/rcl-2.lbr create mode 100644 eagle/supply.lbr create mode 100644 eagle/supply0.lbr diff --git a/code/.gitignore b/code/.gitignore new file mode 100644 index 0000000..680b576 --- /dev/null +++ b/code/.gitignore @@ -0,0 +1,46 @@ +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.o.d +*.lst +*.so +*.eep +*.elf +*.hex +*.lss +*.map +*.sym + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +Icon? +ehthumbs.db +Thumbs.db \ No newline at end of file diff --git a/code/Makefile b/code/Makefile new file mode 100644 index 0000000..e03a968 --- /dev/null +++ b/code/Makefile @@ -0,0 +1,635 @@ +# Hey Emacs, this is a -*- makefile -*- +#---------------------------------------------------------------------------- +# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. +# +# Released to the Public Domain +# +# Additional material for this makefile was written by: +# Peter Fleury +# Tim Henigan +# Colin O'Flynn +# Reiner Patommel +# Markus Pfaff +# Sander Pool +# Frederik Rouleau +# Carlos Lamas +# +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device, using avrdude. +# Please customize the avrdude settings below first! +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + + +# MCU name +MCU = atmega168 +PROG_DEVICE = M168 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# Typical values are: +# F_CPU = 1000000 +# F_CPU = 1843200 +# F_CPU = 2000000 +# F_CPU = 3686400 +# F_CPU = 4000000 +# F_CPU = 7372800 +# F_CPU = 8000000 +# F_CPU = 11059200 +# F_CPU = 14745600 +# F_CPU = 16000000 +# F_CPU = 18432000 +# F_CPU = 20000000 +F_CPU = 12000000 + + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + + +# Target file name (without extension). +TARGET = main + + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = bin + + +# List C source files here. (C dependencies are automatically generated.) +SRC += src/main.c +SRC += src/USART.c +SRC += src/task_man.c +SRC += src/AVC.c +SRC += src/AVC_messages.c +SRC += src/bluetooth.c + +# List C++ source files here. (C dependencies are automatically generated.) +CPPSRC = + + +# 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 = + + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = 2 + + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = stabs + + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = + + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + + +# Place -D or -U options here for C sources +CDEFS = -DF_CPU=$(F_CPU)UL + + +# Place -D or -U options here for ASM sources +ADEFS = -DF_CPU=$(F_CPU) + + +# Place -D or -U options here for C++ sources +CPPDEFS = -DF_CPU=$(F_CPU)UL +#CPPDEFS += -D__STDC_LIMIT_MACROS +#CPPDEFS += -D__STDC_CONSTANT_MACROS + + + +#---------------- Compiler Options C ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS = -g$(DEBUG) +CFLAGS += $(CDEFS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -Wall +#CFLAGS += -Wstrict-prototypes +CFLAGS += -Iusbdrv -I. -DDEBUG_LEVEL=0 +#CFLAGS += -mshort-calls +#CFLAGS += -fno-unit-at-a-time +#CFLAGS += -Wundef +#CFLAGS += -Wunreachable-code +#CFLAGS += -Wsign-compare +CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) +CFLAGS += -ffunction-sections + + +#---------------- Compiler Options C++ ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CPPFLAGS = -g$(DEBUG) +CPPFLAGS += $(CPPDEFS) +CPPFLAGS += -O$(OPT) +CPPFLAGS += -funsigned-char +CPPFLAGS += -funsigned-bitfields +CPPFLAGS += -fpack-struct +CPPFLAGS += -fshort-enums +CPPFLAGS += -fno-exceptions +CPPFLAGS += -Wall +CPPFLAGS += -Wundef +#CPPFLAGS += -mshort-calls +#CPPFLAGS += -fno-unit-at-a-time +#CPPFLAGS += -Wstrict-prototypes +#CPPFLAGS += -Wunreachable-code +#CPPFLAGS += -Wsign-compare +CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst) +CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +#CPPFLAGS += $(CSTANDARD) + + +#---------------- Assembler Options ---------------- +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns: 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] +# -listing-cont-lines: Sets the maximum number of continuation lines of hex +# dump that will be displayed for a given single line of source input. +ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100 + + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + + +MATH_LIB = -lm + + +# List any extra directories to look for libraries here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRALIBDIRS = + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + +#---------------- Linker Options ---------------- +# -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 +LDFLAGS += $(EXTMEMOPTS) +LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) +#LDFLAGS += -T linker_script.x +LDFLAGS += -Wl,--gc-sections + + +#---------------- Programming Options (avrdude) ---------------- + +# Programming hardware +# Type: avrdude -c ? +# to get a full listing. +# +AVRDUDE_PROGRAMMER = usbtiny + +# com1 = serial port. Use lpt1 to connect to parallel port. +AVRDUDE_PORT = com1 # programmer connected to serial device + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep +AVRDUDE_WRITE_FUSE = -U lfuse:w:0xcf:m -U hfuse:w:0xdf:m -U efuse:w:0x01:m + +# 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_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_FLAGS = -p $(PROG_DEVICE) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + + + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +AR = avr-ar rcs +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +REMOVEDIR = rm -rf +COPY = cp +WINSHELL = cmd + + +# 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 C: +MSG_COMPILING_CPP = Compiling C++: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: +MSG_CREATING_LIBRARY = Creating library: + + + + +# Define all object files. +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) + +# Define all listing files. +LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) + + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d + + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) +ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + + + + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +# Change the build target to build a HEX file or a library. +build: elf hex eep lss sym +#build: lib + + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym +LIBNAME=lib$(TARGET).a +lib: $(LIBNAME) + + + +# 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) + +end: + @echo $(MSG_END) + @echo + + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + 2>/dev/null; echo; fi + + + +# Display compiler version information. +gccversion : + @$(CC) --version + + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) + #$(AVRDUDE_WRITE_FUSE) + #$(AVRDUDE_WRITE_EEPROM) +program-flash: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) +program-fuse: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FUSE) +program-eeprom: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_EEPROM) +create-eeprom: + printf "\x010 ZOO \nRules!!\n" > ee_tmp.bin + avr-objcopy -I binary -O ihex ee_tmp.bin $(TARGET).eep + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT = $(OBJCOPY) --debugging +COFFCONVERT += --change-section-address .data-0x800000 +COFFCONVERT += --change-section-address .bss-0x800000 +COFFCONVERT += --change-section-address .noinit-0x800000 +COFFCONVERT += --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 + + + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0 + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S -z $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + + +# Create library from object files. +.SECONDARY : $(TARGET).a +.PRECIOUS : $(OBJ) +%.a: $(OBJ) + @echo + @echo $(MSG_CREATING_LIBRARY) $@ + $(AR) $@ $(OBJ) + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +$(OBJDIR)/%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create object files from C++ source files. +$(OBJDIR)/%.o : %.cpp + @echo + @echo $(MSG_COMPILING_CPP) $< + $(CC) -c $(ALL_CPPFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C++ source files. +%.s : %.cpp + $(CC) -S $(ALL_CPPFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +$(OBJDIR)/%.o : %.S + @echo + @echo $(MSG_ASSEMBLING) $< + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + +# Create preprocessed source for use in sending a bug report. +%.i : %.c + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).cof + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) + $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVE) $(SRC:.c=.i) + $(REMOVEDIR) .dep + + +# Create object files directory +$(shell mkdir $(OBJDIR) 2>/dev/null) + + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff \ +clean clean_list program debug gdb-config + + diff --git a/code/src/AVC.c b/code/src/AVC.c new file mode 100644 index 0000000..7498c02 --- /dev/null +++ b/code/src/AVC.c @@ -0,0 +1,578 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "task_man.h" +#include "USART.h" +#include "AVC.h" +#include "AVC_MACROS.h" +#include "AVC_messages.h" +#include "bluetooth.h" + +extern MSG_IDENTIFIER message_identification_list []; + +static void AVC_process_received_messages(void); +static void remove_head_rx_msg(void); +static MSG_ID find_message_id(MESSAGE* msg); + +static volatile uint8_t parity = 0; +static volatile uint8_t broadcast = 0; +static volatile uint16_t master_address = 0; +static volatile uint16_t slave_address = 0; +static volatile uint8_t control; +static volatile uint8_t data_size; +static volatile uint8_t data[ MAX_DATA_BUFFER ]; + +static volatile uint16_t data_bits = 0; +static volatile uint8_t bit_count = 0; +static volatile uint16_t bit_mask = 0; +static volatile uint8_t data_count = 0; + +static volatile AVC_FRAMES bit_frame = IDLE; + +static MESSAGE message_tx_buffer[MAX_MESSAGE_CNT_TX]; +static MESSAGE message_rx_buffer[MAX_MESSAGE_CNT_RX]; + +static MESSAGE* message_tx_head;//pop here +static MESSAGE* message_tx_tail;//insert here +static MESSAGE* message_rx_head;//pop here +static MESSAGE* message_rx_tail;//insert here + + +static uint8_t usart_quiet = 0; + +static uint8_t IS_PLAYING = 0; +static uint8_t SECONDS = 0; +static uint8_t MINUTES = 0; + +void status_update(void){ + if(IS_PLAYING){ + MESSAGE* msg = AVC_add_tx_transaction_from_list(SELF_PLAYING_STATUS); + msg->data[8] = AVC_Toyota_digits(SECONDS++); + msg->data[7] = AVC_Toyota_digits(MINUTES); + sei(); + if(SECONDS == 60){ + SECONDS = 0; + MINUTES++; + } + if(MINUTES == 60){ + MINUTES = 0; + } + + } +} + +void AVC_init(uint8_t quiet){ + usart_quiet = quiet; + + message_tx_head = message_tx_buffer; + message_tx_tail = message_tx_head; + message_rx_head = message_rx_buffer; + message_rx_tail = message_rx_head; + + add_task_no_arg(AVC_process_received_messages, SYSTEM_20_ms, SYSTEM_5_ms, 0); + + AVC_DDR &= ~(1<\r\n")); + usart_put_c_str( message_identification_list[id].description); + usart_put_c_str( PSTR("\r\n")); + } + return msg; +} +MESSAGE* AVC_add_tx_transaction(uint16_t address_arg, uint8_t broadcast_arg, uint8_t control_arg, uint8_t data_size_arg, uint8_t * data_arg, uint8_t print){ + + cli(); //we don't want to accidentaly update trasaction head AND tail at the same time. +//no room left to allocate tasks + MESSAGE* tx_tail = ++message_tx_tail; + message_tx_tail--; + + // if at end, reset + if(tx_tail == message_tx_buffer + MAX_MESSAGE_CNT_TX) + tx_tail = message_tx_buffer; + + //no room left in TX buffer + if( tx_tail == message_tx_head ){ + sei(); + return NULL; + } + else{ + //fetch current item. + sei(); //enable interupts again. while we do things here... (tail will still be at old place so data won't be sent prematurely) + + message_tx_tail->master_address = MY_ADDRESS; + message_tx_tail->slave_address = address_arg; + message_tx_tail->broadcast = broadcast_arg; + message_tx_tail->control = control_arg; + message_tx_tail->data_size = data_size_arg; + + while(data_size_arg){ + data_size_arg--; + message_tx_tail->data[data_size_arg] = pgm_read_byte(&(data_arg[data_size_arg])); + } + + if(print && !usart_quiet){ + usart_put_c_str( PSTR("-->\r\n")); + usart_put_c_str( PSTR("B: ")); + usart_put_byte(broadcast_arg); + + usart_put_c_str( PSTR("\r\nM: ")); + usart_put_int_hex(MY_ADDRESS); + + usart_put_c_str( PSTR("\r\nS: ")); + usart_put_int_hex(address_arg); + + usart_put_c_str( PSTR("\r\nC: ")); + usart_put_byte_hex(control_arg); + + usart_put_c_str( PSTR("\r\nL: ")); + uint8_t data_s = data_size_arg; + usart_put_byte(data_s); + usart_put_c_str( PSTR("\r\nD: ")); + uint8_t* data_ptr = message_tx_tail->data; + if(data_s > MAX_DATA_BUFFER) + data_s = MAX_DATA_BUFFER; + while(data_s > 0 ){ + data_s--; + usart_put_byte_hex(*data_ptr); + usart_put_c(' '); + data_ptr++; + } + usart_put_c_str( PSTR("\r\n\r\n")); + } + + cli(); + //save for return value + MESSAGE* msg_ptr = message_tx_tail; + //increment tail to new. + message_tx_tail= tx_tail; + //**NOTE** + //we don't enable intterrupt as we MAY want to edit data quickly. DON'T forget to re-enable them!!! + return msg_ptr; + } +} +static MSG_ID find_message_id(MESSAGE* msg){ + for(MSG_ID msg_id = 0; msg_id < MESSAGE_ID_SIZE; msg_id++){ + //match master, slave, broadcast, control, and data length. + if( (msg->broadcast == pgm_read_byte(&(message_identification_list[msg_id].broadcast)) ) && + (msg->master_address == pgm_read_word(&(message_identification_list[msg_id].master))) && + (msg->slave_address == pgm_read_word(&(message_identification_list[msg_id].slave)) ) && + (msg->control == pgm_read_byte(&(message_identification_list[msg_id].control)) ) && + (msg->data_size == pgm_read_byte(&(message_identification_list[msg_id].data_size)) )){ + uint8_t match = 1; + for(int i = 0; i < msg->data_size; i++){ + if(pgm_read_byte(&(message_identification_list[msg_id].data_ignore[i])) || msg->data[i] == pgm_read_byte(&(message_identification_list[msg_id].data[i])) ) + {} + else + { + match = 0; + break; + } + } + + if(match){ + return msg_id; + } + } + } + + return MESSAGE_ID_SIZE; +} + +void handle_message(MSG_ID id){ + + switch(id){ + case CD_CH_LAN_CHECK: + { + MESSAGE* message; + while( (message = AVC_add_tx_transaction_from_list(RESP_LAN_CHECK)) == NULL){ + sei();//release while we don't have something. + } + message->data[4] = message_rx_head->data[4]; + sei();//release once we have altered what we need to. + } + break; + case CONSOLE_DISK_BUTTON_1: + { + MESSAGE* message; + while( (message = AVC_add_tx_transaction_from_list(RESP_DISK_BUTTON_1)) == NULL){ + sei(); + } + sei(); + } + break; + case CONSOLE_DISK_BUTTON_2: + { + MESSAGE* message; + while( (message = AVC_add_tx_transaction_from_list(RESP_DISK_BUTTON_2_0)) == NULL){ + sei(); + } + sei(); + while( (message = AVC_add_tx_transaction_from_list(RESP_DISK_BUTTON_2_1)) == NULL){ + sei(); + } + sei(); + } + break; + case CONSOLE_DISK_PLAY: + { + if(!IS_PLAYING){ + MESSAGE* message; + while( (message = AVC_add_tx_transaction_from_list(RESP_CONSOLE_DISK_PLAY_0)) == NULL){ + sei(); + } + sei(); + while( (message = AVC_add_tx_transaction_from_list(RESP_CONSOLE_DISK_PLAY_1)) == NULL){ + sei(); + } + sei(); + + SECONDS = 0; + MINUTES = 0; + IS_PLAYING = 1; + bluetooth_play_song(); + } + + } + break; + case CONSOLE_DISK_STOP: + { + if(IS_PLAYING){ + MESSAGE* message; + while( (message = AVC_add_tx_transaction_from_list(RESP_CONSOLE_DISK_STOP_0)) == NULL){ + sei(); + } + sei(); + while( (message = AVC_add_tx_transaction_from_list(RESP_CONSOLE_DISK_STOP_1)) == NULL){ + sei(); + } + sei(); + IS_PLAYING = 0; + bluetooth_pause_song(); + } + + } + break; + case CONSOLE_SEEK_UP: + { + if(IS_PLAYING){ + bluetooth_next_song(); + } + } + break; + case CONSOLE_SEEK_DOWN: + { + if(IS_PLAYING){ + bluetooth_previous_song(); + } + } + default: + break; + } + +} + +void AVC_process_received_messages(){ + if(MSG_RECEIVED) + { + MSG_ID id = find_message_id(message_rx_head); + + if(id == MESSAGE_ID_SIZE && !usart_quiet){ + usart_put_c_str( PSTR("<--\r\n")); + usart_put_c_str( PSTR("B: ")); + usart_put_byte(message_rx_head->broadcast); + + usart_put_c_str( PSTR("\r\nM: ")); + usart_put_int_hex(message_rx_head->master_address); + + usart_put_c_str( PSTR("\r\nS: ")); + usart_put_int_hex(message_rx_head->slave_address); + + usart_put_c_str( PSTR("\r\nC: ")); + usart_put_byte_hex(message_rx_head->control); + + usart_put_c_str( PSTR("\r\nL: ")); + uint8_t data_s = message_rx_head->data_size; + usart_put_byte(data_s); + usart_put_c_str( PSTR("\r\nD: ")); + uint8_t* data_ptr = message_rx_head->data; + if(data_s > MAX_DATA_BUFFER) + data_s = MAX_DATA_BUFFER; + while(data_s > 0 ){ + data_s--; + usart_put_byte_hex(*data_ptr); + usart_put_c(' '); + data_ptr++; + } + usart_put_c_str( PSTR("\r\n\r\n")); + } + else{ + if(!usart_quiet){ + usart_put_c_str( PSTR("<--\r\n")); + usart_put_c_str( PSTR("MSG: ")); + usart_put_c_str( message_identification_list[id].description); + usart_put_c_str( PSTR("\r\n")); + } + handle_message(id); + } + + remove_head_rx_msg(); + } +} + +void remove_head_rx_msg(){ + //re-cover msg stack place; + cli(); + message_rx_head++; + if(message_rx_head == message_rx_buffer + MAX_MESSAGE_CNT_RX) + message_rx_head = message_rx_buffer; + sei(); +} + + +uint8_t AVC_Toyota_digits(uint8_t num){ + uint8_t hex = 0; + hex |= num%10; + hex |= (num/10)<<4; + return hex; +} + +/* The way this works, is via a well-defined switch case statement. +** Data is placed and sensed via the external interrupt pint on the +** microcontroller. When it is pulsed, if it is a rising edge, it triggers +** data capture. I did make an attempt at "outside of ISR" handling, +** but the requests just became unsynchronised and parity mismatch exploded. +** +** **********BUG LIST******** +** ) For some reason, During one of the DATA_PAYLOAD instances, the parity +** check fails. I have yet to determine why, but it is not frequent enough +** to stop development entirely. I suspect it is just timing of data that +** could be tweaked a bit. +** *****FIX????: Turns out that this code is VERY time sensitive. It comes +** so close to being able to catch the bits in time, that I had to take care +** of (remove or make no_block) other ISRs to ensure the code could catch +** the bits in time. USART driver is now polling based for transmit, and +** utilizes the new task queue to do it's job. The timer for task_man is now +** no_block, which will mean that the timer could be off by up to several ms. +** The ONLY way I could see a better way would be to do this is with a faster +** osclillator :) +*/ + +ISR(INT0_vect){ + uint16_t count = TCNT1; //grab timer value + RESET_TIMER(); //reset timer for value checking + + if(REC_HIGH){ + //insert room for bit, add to counter + data_bits <<=1; + + if(FRAME_IS_IDLE && count > START_BIT_HOLD_LOW_CHECK ){ + data_bits = 1; + bit_frame = START; + } + else if(count < BIT_POLL_LENGTH) + { + // Set new bit. + data_bits |= 0x0001; + parity = !parity; + } + +// if(!FRAME_IS_ERROR && !FRAME_IS_FINISHED && !FRAME_IS_IDLE) + + switch(bit_frame){ + case IDLE: + break; + case START: + FRAMING_RESET(); + FRAMING_NEXT(); + break; + case BROADCAST: + broadcast = data_bits; + FRAMING_RESET(); + FRAMING_NEXT(); + break; + case MASTER_ADDR: + master_address = data_bits>>1; + FRAMING_NEXT(); + FRAMING_PARITY_CHECK(); + FRAMING_RESET(); + break; + case SLAVE_ADDR: + slave_address = data_bits>>1; + FRAMING_NEXT(); + FRAMING_PARITY_CHECK(); + FRAMING_RESET(); + if(FRAMING_FOR_ME){ + FRAMING_SEND_ACK(); + FRAMING_NEXT(); + } + break; + case SLAVE_ACK: + FRAMING_RESET(); + FRAMING_NEXT(); + break; + case CONTROL: + control = data_bits>>1; + FRAMING_NEXT(); + FRAMING_PARITY_CHECK(); + FRAMING_RESET(); + if(FRAMING_FOR_ME){ + FRAMING_SEND_ACK(); + FRAMING_NEXT(); + } + break; + case CONTROL_ACK: + FRAMING_RESET(); + FRAMING_NEXT(); + break; + case DATA_SIZE: + data_size = data_bits>>1; + FRAMING_NEXT(); + FRAMING_PARITY_CHECK(); + FRAMING_READY_DATA(); + FRAMING_RESET(); + if(FRAMING_FOR_ME){ + FRAMING_SEND_ACK(); + FRAMING_NEXT(); + } + break; + case DATA_SIZE_ACK: + FRAMING_RESET(); + FRAMING_DATA_ACK_CHECK(); + break; + case DATA_PAYLOAD: + data[data_count++] = data_bits>>1; + FRAMING_NEXT(); + FRAMING_PARITY_CHECK(); + FRAMING_RESET(); + if(FRAMING_FOR_ME){ + FRAMING_SEND_ACK(); + FRAMING_DATA_ACK_CHECK(); + } + break; + case DATA_PAYLOAD_ACK: + FRAMING_RESET(); + FRAMING_DATA_ACK_CHECK(); //end of line, so we use DATA_SIZE_ACK+1. + break; + case FRAME_FINISHED: + break; + case FRAME_ERROR: + break; + default: + FRAMING_NEXT(); + break; + + } + + } + else{ + + } + +} + + +/* We will try periodlically checking the bus to see if it is active +** and if there are any outstanding transactions that need to be sent. +** If so, we will try to use the same ISR to both detect and send data +** by altering the OCR1A register to accomadate. +*/ +ISR(TIMER1_COMPA_vect){ + DISABLE_PIN_CHANGE(); + + //if we got here initially, bit_frame should be in IDLE state. Good to check anyways to be sure! + if(FRAME_IS_IDLE && READY_TO_TRANSMIT){ + LOAD_GLOBALS(message_tx_head); + + SEND_START_BIT(); + + SEND_BROADCAST_BIT(); + + //master address + SEND_ADDRESS(master_address); + + SEND_PARITY(); + + SEND_ADDRESS(slave_address); + + SEND_PARITY(); + + //ACK + ACKNOWLEDGE(); + + //control + SEND_CONTROL(); + + //parity bit + SEND_PARITY(); + + //ACK + ACKNOWLEDGE(); + + //data Size + SEND_BYTE(data_size); + + //parity bit + SEND_PARITY(); + + //ACK + ACKNOWLEDGE(); + + //send all our data. + data_count = 0; + while(data_count < data_size){ + + uint8_t data_to_send = data[data_count++]; + SEND_BYTE(data_to_send); + + //parity bit + SEND_PARITY(); + + //ACK + ACKNOWLEDGE(); + } + + REMOVE_HEAD_TX_MSG(); + + } + + ENABLE_PIN_CHANGE(); + RESET_TIMER(); + +} + +//This ISR for the COMPB value will be used to send the ACK needed for transmission. diff --git a/code/src/AVC.h b/code/src/AVC.h new file mode 100644 index 0000000..0cb7be5 --- /dev/null +++ b/code/src/AVC.h @@ -0,0 +1,76 @@ +#ifndef __AVC_OTHER_H +#define __AVC_OTHER_H +#include "AVC_messages.h" + +#define MAX_DATA_BUFFER 20 +#define MAX_MESSAGE_CNT_TX 5 //we *SHOULD* only ever queue a handful of messages at any given time. + //using the function provided, it will even stall (in main runtime) until addition successful +#define MAX_MESSAGE_CNT_RX 6 //This is also quite generous, as we have seen that it takes MANY messages to reach this limit. + +#define AVC_DDR DDRD +#define AVC_PORT PORTD +#define AVC_PIN PIND +#define RI 2 +#define TO 3 +#define RE 4 +#define TE 5 + +#define NORMAL_BIT_LENGTH (12*40) // +#define BIT_1_HOLD_LOW_LENGTH (12*20) // 240 +#define BIT_0_HOLD_LOW_LENGTH (12*32) // 370 +#define BIT_1_HOLD_HIGH_LENGTH (NORMAL_BIT_LENGTH - BIT_1_HOLD_LOW_LENGTH) +#define BIT_0_HOLD_HIGH_LENGTH (NORMAL_BIT_LENGTH - BIT_0_HOLD_LOW_LENGTH) +#define BIT_POLL_LENGTH (BIT_0_HOLD_LOW_LENGTH - ((BIT_0_HOLD_LOW_LENGTH - BIT_1_HOLD_LOW_LENGTH) / 2)) + +#define ACK_HOLD_TIME (BIT_1_HOLD_LOW_LENGTH) +#define ACK_CHECK_LENGTH ((BIT_0_HOLD_LOW_LENGTH - ((BIT_0_HOLD_LOW_LENGTH - BIT_1_HOLD_LOW_LENGTH) / 2)) - BIT_1_HOLD_LOW_LENGTH) +#define ACK_TIMEOUT (25*12) + +#define START_BIT_LENGTH (12*186) +#define START_BIT_HOLD_LOW_LENGTH (12*168) +#define START_BIT_HOLD_LOW_CHECK (12*160) +#define LINE_BUSY_CHECK (12*200) + +//AVC framing information to aid the receive parsing. +typedef enum avc_frames{ IDLE = 0, + START = 1, + BROADCAST = 2, + MASTER_ADDR_S = 14, + MASTER_ADDR = 15, + SLAVE_ADDR_S = 27, + SLAVE_ADDR = 28, + SLAVE_ACK = 29, + CONTROL_S = 33, + CONTROL = 34, + CONTROL_ACK = 35, + DATA_SIZE_S = 43, + DATA_SIZE = 44, + DATA_SIZE_ACK = 45, + DATA_PAYLOAD_S = 53, + DATA_PAYLOAD = 54, + DATA_PAYLOAD_ACK = 55, + FRAME_FINISHED = 56, + FRAME_ERROR = 57, + } AVC_FRAMES; + + +//AVC message structure for received messages, and those to be transmitted. +typedef struct message{ + uint16_t master_address; + uint16_t slave_address; + uint8_t broadcast; + uint8_t control; + uint8_t data_size; + uint8_t data[MAX_DATA_BUFFER]; +} MESSAGE; + + + + + + +void AVC_init(uint8_t quiet); +MESSAGE* AVC_add_tx_transaction(uint16_t address_arg, uint8_t broadcast_arg, uint8_t control_arg, uint8_t data_size_arg, uint8_t * data_arg, uint8_t print); +MESSAGE* AVC_add_tx_transaction_from_list(MSG_ID id); +uint8_t AVC_Toyota_digits(uint8_t num); +#endif \ No newline at end of file diff --git a/code/src/AVC_MACROS.h b/code/src/AVC_MACROS.h new file mode 100644 index 0000000..da58fc7 --- /dev/null +++ b/code/src/AVC_MACROS.h @@ -0,0 +1,205 @@ +#ifndef __AVC_MACROS_H +#define __AVC_MACROS_H + +#define EN_RECEIVE(){ AVC_PORT &= ~((1<= ACK_TIMEOUT) return; \ + }\ + TCNT1 = 0;\ + TRANSMIT_LOW();\ + while(TCNT1 < BIT_0_HOLD_LOW_LENGTH); \ + TRANSMIT_HIGH(); \ + } + +#define FRAMING_RESTART() { bit_frame = IDLE;} +#define RESET_TIMER() { TCNT1 = 0;} + + +#define ADD_RECEIVED_TRANSACTION() {\ + MESSAGE* rx_tail = ++message_rx_tail;\ + message_rx_tail--;\ + if(rx_tail == message_rx_buffer + MAX_MESSAGE_CNT_RX)\ + rx_tail = message_rx_buffer;\ + \ + if( rx_tail == message_rx_head ){\ + sei();\ + return;\ + }\ + else{\ + \ + message_rx_tail->master_address = master_address;\ + message_rx_tail->slave_address = slave_address;\ + message_rx_tail->broadcast = broadcast;\ + message_rx_tail->control = control;\ + \ + if(data_size > MAX_DATA_BUFFER)\ + data_size = MAX_DATA_BUFFER;\ + message_rx_tail->data_size = data_size;\ + \ + while(data_size > 0){\ + data_size--;\ + message_rx_tail->data[data_size] = data[data_size];\ + }\ + message_rx_tail = rx_tail;\ + }\ +} + + +/**********************SEND MACROS***********************/ + +#define READY_TO_TRANSMIT ( message_tx_head != message_tx_tail ) + +#define LOAD_GLOBALS(msg){\ + broadcast = msg->broadcast;\ + master_address = msg->master_address;\ + slave_address = msg->slave_address;\ + control = msg->control;\ + data_size = msg->data_size ;\ + for ( uint8_t i = 0; i < data_size; i++ )\ + {\ + data[i] = msg->data[i] ;\ + }} + +#define DISABLE_PIN_CHANGE() {EIMSK &= ~(1<>=1;\ + while(TCNT1 < NORMAL_BIT_LENGTH);\ + }} + +#define SEND_CONTROL(){\ + bit_mask = (1<<3);\ + parity = 0;\ + while(bit_mask){\ + TRANSMIT_LOW();\ + RESET_TIMER();\ + if(control&bit_mask){\ + parity = !parity;\ + while(TCNT1 < BIT_1_HOLD_LOW_LENGTH);\ + }\ + else\ + while(TCNT1 < BIT_0_HOLD_LOW_LENGTH);\ + TRANSMIT_HIGH();\ + bit_mask>>=1;\ + while(TCNT1 < NORMAL_BIT_LENGTH);\ + }} + +#define SEND_BYTE(x){\ + bit_mask = (1<<7);\ + parity = 0;\ + while(bit_mask){\ + TRANSMIT_LOW();\ + RESET_TIMER();\ + if(x&bit_mask){\ + parity = !parity;\ + while(TCNT1 < BIT_1_HOLD_LOW_LENGTH);\ + }\ + else\ + while(TCNT1 < BIT_0_HOLD_LOW_LENGTH);\ + TRANSMIT_HIGH();\ + bit_mask>>=1;\ + while(TCNT1 < NORMAL_BIT_LENGTH);\ + }} + +#define SEND_PARITY(){\ + TRANSMIT_LOW();\ + RESET_TIMER();\ + if(parity)\ + while(TCNT1 < BIT_1_HOLD_LOW_LENGTH);\ + else\ + while(TCNT1 < BIT_0_HOLD_LOW_LENGTH);\ + TRANSMIT_HIGH();\ + while(TCNT1 < NORMAL_BIT_LENGTH);\ + } + +#define ACKNOWLEDGE() {\ + if (broadcast)\ + {\ + RESET_TIMER();\ + TRANSMIT_LOW();\ + while ( TCNT1 < BIT_1_HOLD_LOW_LENGTH );\ + TRANSMIT_HIGH();\ + while ( INPUT_IS_SET );\ + if ( TCNT1 > BIT_POLL_LENGTH)\ + {\ + while ( INPUT_IS_SET );\ + }\ + else{\ + RESET_TIMER();\ + OCR1A = LINE_BUSY_CHECK;\ + ENABLE_PIN_CHANGE();\ + if(!usart_quiet)\ + usart_put_c_str(PSTR("ACK ERROR!\r\n"));\ + return;\ + }\ + }\ + else{\ + RESET_TIMER();\ + TRANSMIT_LOW();\ + while(TCNT1 < BIT_0_HOLD_LOW_LENGTH);\ + TRANSMIT_HIGH();\ + while(TCNT1 < NORMAL_BIT_LENGTH);\ + }}\ + +#define REMOVE_HEAD_TX_MSG() { \ + message_tx_head++;\ + if(message_tx_head == message_tx_buffer + MAX_MESSAGE_CNT_TX)\ + message_tx_head = message_tx_buffer;} + +#endif \ No newline at end of file diff --git a/code/src/AVC_messages.c b/code/src/AVC_messages.c new file mode 100644 index 0000000..eea803f --- /dev/null +++ b/code/src/AVC_messages.c @@ -0,0 +1,51 @@ +#include +#include "AVC_messages.h" + + +MSG_IDENTIFIER message_identification_list [] PROGMEM = { + + { AUDIO_AUX_IN_USE, 0, HU_ADDRESS, LAN_BROADCAST_ADDRESS, CONTROL_FLAGS, 4, {0x11, 0x01, 0x45, 0x01}, {}, "AUX in use" }, + { AUDIO_TUNER_IN_USE, 0, HU_ADDRESS, LAN_BROADCAST_ADDRESS, CONTROL_FLAGS, 4, {0x11, 0x01, 0x45, 0x60}, {}, "Tuner in use" }, + { AUDIO_TAPE_IN_USE, 0, HU_ADDRESS, LAN_BROADCAST_ADDRESS, CONTROL_FLAGS, 4, {0x11, 0x01, 0x45, 0x61}, {}, "Tape in use" }, + { AUDIO_CD_IN_USE, 0, HU_ADDRESS, LAN_BROADCAST_ADDRESS, CONTROL_FLAGS, 4, {0x11, 0x01, 0x45, 0x62}, {}, "CD in use" }, + { AUDIO_VOLUME_STATUS, 0, HU_ADDRESS, BROADCAST_ADDRESS , CONTROL_FLAGS, 16, {0x74, 0x31, 0xF1, 0x80, '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 0x03, 0x00}, {0, 0, 0, 0, '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 0, 0}, "Volume/Mixer Info"}, + { TUNER_STATUS, 0, HU_ADDRESS, BROADCAST_ADDRESS , CONTROL_FLAGS, 13, {0x60, 0x31, 0xF1, 0x01, '?', '?', '?', '?', '?', '?', 0x00, 0x00, 0x00}, {0, 0, 0, 0, '?', '?', '?', '?', '?', '?', 0, 0, 0}, "Tuner Status"}, + { CD_STATUS, 0, HU_ADDRESS, BROADCAST_ADDRESS , CONTROL_FLAGS, 11, {0x62, 0x31, 0xF1, 0x01, 0x10, '?', '?', '?', '?', 0x00, 0x80}, {0, 0, 0, 0, 0, '?', '?', '?', '?', 0, 0}, "CD Playing Status"}, + { CONSOLE_OFF, 0, HU_ADDRESS, LAN_BROADCAST_ADDRESS, CONTROL_FLAGS, 3, {0x11, 0x01, 0x46}, {}, "Console is off" }, + + { LAN_STATUS, 0, HU_ADDRESS, LAN_BROADCAST_ADDRESS, CONTROL_FLAGS, 3, {0x00, 0x01, 0x0A}, {}, "LAN Status" }, + { LAN_REGISTER, 0, HU_ADDRESS, LAN_BROADCAST_ADDRESS, CONTROL_FLAGS, 3, {0x11, 0x01, 0x00}, {}, "LAN Register" }, + { LAN_INIT, 0, HU_ADDRESS, LAN_BROADCAST_ADDRESS, CONTROL_FLAGS, 3, {0x11, 0x01, 0x01}, {}, "LAN Restart" }, + { LAN_CHECK, 0, HU_ADDRESS, LAN_BROADCAST_ADDRESS, CONTROL_FLAGS, 4, {0x11, 0x01, 0x20, '?'}, {0, 0, 0, '?'}, "LAN Check" }, + + { CD_CH_LAN_CHECK, 1, HU_ADDRESS, MY_ADDRESS, CONTROL_FLAGS, 5, {0x00, 0x11, 0x01, 0x20, '?'}, {0, 0, 0, 0, '?'}, "LAN Check For Me" }, + { RESP_LAN_CHECK, 1, MY_ADDRESS, HU_ADDRESS, CONTROL_FLAGS, 6, {0x00, 0x01, 0x11, 0x30, '?', 0x0}, {0, 0, 0, 0, '?', 0}, "LAN Check Response"}, + + { SELF_REGISTER, 1, MY_ADDRESS, HU_ADDRESS, CONTROL_FLAGS, 5, {0x00, 0x01, 0x11, 0x10, 0x63}, {}, "Self-Register"}, + + { CONSOLE_DISK_BUTTON_1, 1, HU_ADDRESS, MY_ADDRESS, CONTROL_FLAGS, 4, {0x00, 0x25, 0x63, 0x80}, {}, "Disk Button 1"}, + { RESP_DISK_BUTTON_1, 1, MY_ADDRESS, HU_ADDRESS, CONTROL_FLAGS, 5, {0x00, 0x63, 0x12, 0x50, 0x01}, {}, "Disk Response1"}, + { CONSOLE_DISK_BUTTON_2, 1, HU_ADDRESS, MY_ADDRESS, CONTROL_FLAGS, 6, {0x00, 0x11, 0x63, 0x42, 0x01, 0x00}, {}, "Disk Button 2"}, + { RESP_DISK_BUTTON_2_0, 1, MY_ADDRESS, HU_ADDRESS, CONTROL_FLAGS, 5, {0x00, 0x63, 0x12, 0x52, 0x01}, {}, "Disk Response2-0"}, + { RESP_DISK_BUTTON_2_1, 0, MY_ADDRESS, HU_ADDRESS, CONTROL_FLAGS, 11, {0x63, 0x31, 0xF1, 0x01, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x80}, {}, "Disk Response2-1"}, + { CONSOLE_DISK_PLAY, 0, HU_ADDRESS, LAN_BROADCAST_ADDRESS, CONTROL_FLAGS, 4, {0x11, 0x01, 0x45, 0x63}, {}, "Console - PLAY"}, + { RESP_CONSOLE_DISK_PLAY_0, 0, MY_ADDRESS, BROADCAST_ADDRESS, CONTROL_FLAGS, 11, {0x63, 0x31, 0xF1, 0x01, 0x28, 0x01, 0x01, 0x00, 0x00, 0x00, 0x80}, {}, "Response PLAY0"}, + { RESP_CONSOLE_DISK_PLAY_1, 0, MY_ADDRESS, BROADCAST_ADDRESS, CONTROL_FLAGS, 11, {0x63, 0x31, 0xF1, 0x01, 0x10, 0x01, 0x01, 0x00, 0x00, 0x00, 0x80}, {}, "Response PLAY1"}, + + { SELF_PLAYING_STATUS, 0, MY_ADDRESS, BROADCAST_ADDRESS, CONTROL_FLAGS, 11, {0x63, 0x31, 0xF1, 0x01, 0x10, 0x01, 0x01, 0x00, 0x00, 0x00, 0x80}, {}, "ME: Play Status"}, + + { CONSOLE_DISK_STOP, 1, HU_ADDRESS, MY_ADDRESS, CONTROL_FLAGS, 6, {0x00, 0x11, 0x63, 0x43, 0x01, 0x00}, {}, "Console - Stop" }, + { RESP_CONSOLE_DISK_STOP_0, 1, MY_ADDRESS, HU_ADDRESS, CONTROL_FLAGS, 5, {0x00, 0x63, 0x11, 0x53, 0x01 }, {}, "Response STOP0"}, + { RESP_CONSOLE_DISK_STOP_1, 0, MY_ADDRESS, BROADCAST_ADDRESS, CONTROL_FLAGS, 11, {0x63, 0x31, 0xF1, 0x00, 0x30, 0x00, 0x00,0x00, 0x00, 0x00, 0x80}, {}, "Response STOP1"}, + + { CONSOLE_SEEK_UP, 1, HU_ADDRESS, MY_ADDRESS, CONTROL_FLAGS, 4, {0x00, 0x25, 0x63, 0x94}, {}, "Seek Up"}, + { CONSOLE_SEEK_DOWN, 1, HU_ADDRESS, MY_ADDRESS, CONTROL_FLAGS, 4, {0x00, 0x25, 0x63, 0x95}, {}, "Seek Down"}, + { CONSOLE_SCAN, 1, HU_ADDRESS, MY_ADDRESS, CONTROL_FLAGS, 4, {0x00, 0x25, 0x63, 0xA6}, {}, "Scan"}, + { CONSOLE_BTN_1, 1, HU_ADDRESS, MY_ADDRESS, CONTROL_FLAGS, 4, {0x00, 0x25, 0x63, 0xB0}, {}, "Button 1"}, + { CONSOLE_BTN_2, 1, HU_ADDRESS, MY_ADDRESS, CONTROL_FLAGS, 4, {0x00, 0x25, 0x63, 0xA0}, {}, "Button 2"}, + { CONSOLE_BTN_3, 1, HU_ADDRESS, MY_ADDRESS, CONTROL_FLAGS, 4, {0x00, 0x25, 0x63, 0x91}, {}, "Button 3"}, + { CONSOLE_BTN_4, 1, HU_ADDRESS, MY_ADDRESS, CONTROL_FLAGS, 4, {0x00, 0x25, 0x63, 0x90}, {}, "Button 4"}, + { CONSOLE_BTN_5, 1, HU_ADDRESS, MY_ADDRESS, CONTROL_FLAGS, 4, {0x00, 0x25, 0x63, 0x99}, {}, "Button 5"}, + { CONSOLE_BTN_6, 1, HU_ADDRESS, MY_ADDRESS, CONTROL_FLAGS, 4, {0x00, 0x25, 0x63, 0x98}, {}, "Button 6"}, + +}; diff --git a/code/src/AVC_messages.h b/code/src/AVC_messages.h new file mode 100644 index 0000000..641d7a0 --- /dev/null +++ b/code/src/AVC_messages.h @@ -0,0 +1,71 @@ +#ifndef __AVC_MESSAGES_H +#define __AVC_MESSAGES_H + +#define HU_ADDRESS 0x190 +#define MY_ADDRESS 0x360 // CD Changer #1 +#define BROADCAST_ADDRESS 0x01FF // All audio devices +#define LAN_BROADCAST_ADDRESS 0x0FFF +#define CONTROL_FLAGS 0xF + +typedef enum MSG_ID{ + AUDIO_AUX_IN_USE, + AUDIO_TUNER_IN_USE, + AUDIO_TAPE_IN_USE, + AUDIO_CD_IN_USE, + AUDIO_VOLUME_STATUS, + TUNER_STATUS, + CD_STATUS, + CONSOLE_OFF, + + LAN_STATUS, + LAN_REGISTER, + LAN_INIT, + LAN_CHECK, + + CD_CH_LAN_CHECK, + RESP_LAN_CHECK, + + SELF_REGISTER, + + CONSOLE_DISK_BUTTON_1, + RESP_DISK_BUTTON_1, + CONSOLE_DISK_BUTTON_2, + RESP_DISK_BUTTON_2_0, + RESP_DISK_BUTTON_2_1, + CONSOLE_DISK_PLAY, + RESP_CONSOLE_DISK_PLAY_0, + RESP_CONSOLE_DISK_PLAY_1, + + SELF_PLAYING_STATUS, + + CONSOLE_DISK_STOP, + RESP_CONSOLE_DISK_STOP_0, + RESP_CONSOLE_DISK_STOP_1, + + CONSOLE_SEEK_UP, + CONSOLE_SEEK_DOWN, + CONSOLE_SCAN, + CONSOLE_BTN_1, + CONSOLE_BTN_2, + CONSOLE_BTN_3, + CONSOLE_BTN_4, + CONSOLE_BTN_5, + CONSOLE_BTN_6, + + MESSAGE_ID_SIZE +}MSG_ID; + +typedef struct MSG_IDENTIFIER{ + MSG_ID msg_id; + uint8_t broadcast; + uint16_t master; + uint16_t slave; + uint8_t control; + uint8_t data_size; + uint8_t data[20]; + uint8_t data_ignore[20]; + char description[20]; +}MSG_IDENTIFIER; + + +#endif \ No newline at end of file diff --git a/code/src/USART.c b/code/src/USART.c new file mode 100644 index 0000000..20d452f --- /dev/null +++ b/code/src/USART.c @@ -0,0 +1,319 @@ +#include +#include +#include +#include + +#include "task_man.h" +#include "USART.h" + + static uint8_t tx_buffer[MAX_TX_BUFFER]; + static uint8_t rx_buffer[MAX_RX_BUFFER]; + + static uint8_t* tx_buff_head; + static uint8_t* tx_buff_tail; + + static uint8_t* rx_buff_head; + static uint8_t* rx_buff_tail; + + static no_arg_callback UART_callback = NULL; + enum TX_TYPE{POLLING, INTERRUPT}; + static enum TX_TYPE tx_type = POLLING; + static uint8_t UART_escape = '\n'; + +void USART_INIT_INTERRUPT() +{ + tx_type = INTERRUPT; + + //initialize buffers + tx_buff_head = tx_buffer; + tx_buff_tail = tx_buffer; + rx_buff_head = rx_buffer; + rx_buff_tail = rx_buffer; + + // get prescaller value + uint16_t ubbr = (((F_CPU / (USART_BAUDRATE * 16UL))) - 1); + + // Set baud rate + UBRR0H = (uint8_t)(ubbr>>8); + UBRR0L = (uint8_t)ubbr; + + // Set frame format to 8 data bits 00s in other fields indicate no parity, 1 stop bit. + UCSR0C |= (1<>8); + UBRR0L = (uint8_t)ubbr; + + // Set frame format to 8 data bits 00s in other fields indicate no parity, 1 stop bit. + UCSR0C |= (1<0); + return UART_GOOD; +} + +uint8_t usart_put_int_hex(uint16_t integer){ + char current = (integer>>12)&0x000F; + if(current > 0x9) + usart_put_c(('A'-10)+current); + else + usart_put_c('0'+current); + + current = (integer>>8)&0x000F; + if(current > 0x9) + usart_put_c(('A'-10)+current); + else + usart_put_c('0'+current); + + current = (integer>>4)&0x000F; + if(current > 0x9) + usart_put_c(('A'-10)+current); + else + usart_put_c('0'+current); + + current = (integer)&0x000F; + if(current > 0x9) + usart_put_c(('A'-10)+current); + else + usart_put_c('0'+current); + + return UART_GOOD; +} + +uint8_t usart_put_byte(uint8_t byte){ +char values[3]; +int8_t i = 0; + do{ + uint8_t val = byte%10; + values[i++] = val; + byte /= 10; + }while(byte); + do{ + + if(usart_put_c('0' + values[--i]) != UART_GOOD) + return 1; + }while(i>0); + return UART_GOOD; +} +uint8_t usart_put_byte_hex(uint8_t byte){ + + char current = (byte>>4)&0x000F; + if(current > 0x9) + usart_put_c(('A'-10)+current); + else + usart_put_c('0'+current); + + current = (byte)&0x000F; + if(current > 0x9) + usart_put_c(('A'-10)+current); + else + usart_put_c('0'+current); + return UART_GOOD; +} + +uint8_t usart_check_recv(){ + + //if empty, don't add anything to buffer. + if( rx_buff_head == rx_buff_tail ){ + return UART_BUFFER_EMPTY; + } + else return UART_GOOD; +} diff --git a/code/src/USART.h b/code/src/USART.h new file mode 100644 index 0000000..85fb184 --- /dev/null +++ b/code/src/USART.h @@ -0,0 +1,36 @@ + +#ifndef __USART_H +#define __USART_H + + + #define USART_BAUDRATE 9600 + + #define USART_STATUS UCSR0A + #define USART_CONTROL UCSR0B + #define USART_DATA UDR0 + + #define MAX_TX_BUFFER 355 + #define MAX_RX_BUFFER 50 + + enum UART_ERROR_CODES {UART_GOOD, UART_BUFFER_FULL, UART_BUFFER_EMPTY, USART_COMP_SHORT, USART_COMP_LONG}; + + void USART_INIT_INTERRUPT(); + void USART_INIT_POLLING(); + void USART_TRANSMIT_TASK(void); + void UART_callback_register(no_arg_callback callback, uint8_t escape); + + uint8_t usart_put_c(char character); + uint8_t usart_put_str(char* str); + uint8_t usart_put_c_str(const char * str); + uint8_t usart_put_c_arr(char str[]); + uint8_t usart_put_int(uint16_t integer); + uint8_t usart_put_int_hex(uint16_t integer); + uint8_t usart_put_byte(uint8_t byte); + uint8_t usart_put_byte_hex(uint8_t byte); + uint8_t usart_put_nl(void); + uint8_t usart_get_c(void); + + uint8_t usart_check_recv(void); + + + #endif \ No newline at end of file diff --git a/code/src/bluetooth.c b/code/src/bluetooth.c new file mode 100644 index 0000000..6c8a618 --- /dev/null +++ b/code/src/bluetooth.c @@ -0,0 +1,129 @@ +#include +#include +#include +#include +#include +#include + +#include "task_man.h" +#include "bluetooth.h" +#include "USART.h" + +static MATCH_STATES match_state = NO_MATCH; +static uint8_t match_place = 0; +static char connected_mac_address[MAC_ADDRESS_LENGTH]; +static void bluetooth_rec_callback(void); + + +void bluetooth_init(){ + + add_task_no_arg(bluetooth_rec_callback, SYSTEM_20_ms, SYSTEM_5_ms, 0); + +} + +void bluetooth_config(){ + + usart_put_c_str(PSTR("SET CONTROL ECHO 4\r\n")); + usart_put_c_str(PSTR("VOLUME 6\r\n")); + usart_put_c_str(PSTR("SET CONTROL MICBIAS 10 12\r\n")); + usart_put_c_str(PSTR("SET CONTROL CONFIG 100\r\n")); + usart_put_c_str(PSTR("SET PROFILE A2DP SINK\r\n")); + usart_put_c_str(PSTR("SET PROFILE AVRCP CONTROLLER\r\n")); + usart_put_c_str(PSTR("SET PROFILE HFP ON\r\n")); + usart_put_c_str(PSTR("SET BT AUTH * 2323\r\n")); + usart_put_c_str(PSTR("SET BT CLASS 240428\r\n")); + usart_put_c_str(PSTR("SET BT NAME Bluetooth Matrix\r\n")); + + usart_put_c_str(PSTR("SET CONTROL AUTOCALL 0017 5000 A2DP\r\n")); + + usart_put_c_str(PSTR("SET CONTROL RINGTONE 6,gfgfgf__gfgfgf______gfgfgf__gfgfgf\r\n")); + + usart_put_c_str(PSTR("RESET\r\n")); + +} + +void bluetooth_next_song(){ + usart_put_c_str(PSTR("@0 AVRCP FORWARD\r\n")); +} + +void bluetooth_previous_song(){ + usart_put_c_str(PSTR("@0 AVRCP BACKWARD\r\n")); +} + +void bluetooth_pause_song(){ + usart_put_c_str(PSTR("@0 AVRCP PAUSE\r\n")); +} + +void bluetooth_play_song(){ + usart_put_c_str(PSTR("@0 AVRCP PLAY\r\n")); +} + +void bluetooth_rec_callback(){ + + uint8_t character; + const char* connect_str = PSTR("CONNECT 0 AVRCP 17\r\n"); + const char* list_str = PSTR("LIST 0 CONNECTED L2CAP 48 0 0 0 0 0 "); + + while((character = usart_get_c()) != UART_BUFFER_EMPTY){ + switch(match_state){ + + case NO_MATCH: + match_place = 0; + if( character == pgm_read_byte_near(connect_str)){ + match_state = MATCHING_CONNECT; + match_place++; + } + else if( character == pgm_read_byte_near(list_str)){ + match_state = MATCHING_LIST; + match_place++; + } + + break; + case MATCHING_CONNECT: + if( character == pgm_read_byte_near(connect_str + match_place)){ + if(character == '\n'){ + match_state = NO_MATCH; + usart_put_c_str(PSTR("LIST\r\n")); + } + else{ + match_place++; + } + } + else{ + match_state = NO_MATCH; + } + break; + + case MATCHING_LIST: + { + uint8_t list_char = pgm_read_byte_near(list_str + match_place); + if( character == list_char){ + match_place++; + } + else if(list_char == '\0'){ + match_state = FETCHING_MAC; + connected_mac_address[0] = character; + match_place = 1; + } + else{ + match_state = NO_MATCH; + } + break; + } + case FETCHING_MAC: + if(match_place < MAC_ADDRESS_LENGTH-1){ + connected_mac_address[match_place] = character; + match_place++; + } + else{ + connected_mac_address[match_place] = '\0'; + usart_put_c_str(PSTR("CALL ")); + usart_put_str(connected_mac_address); + usart_put_c_str(PSTR(" 111F HFP\r\n")); + match_state = NO_MATCH; + } + break; + } + } + +} \ No newline at end of file diff --git a/code/src/bluetooth.h b/code/src/bluetooth.h new file mode 100644 index 0000000..d910e5c --- /dev/null +++ b/code/src/bluetooth.h @@ -0,0 +1,20 @@ +#ifndef __BLUETOOTH_H +#define __BLUETOOTH_H + +#define MAC_ADDRESS_LENGTH 18 + +void bluetooth_init(void); +void bluetooth_config(void); +void bluetooth_next_song(void); +void bluetooth_previous_song(void); +void bluetooth_pause_song(void); +void bluetooth_play_song(void); + +typedef enum MATCH_STATES { + NO_MATCH, + MATCHING_CONNECT, + MATCHING_LIST, + FETCHING_MAC, + } MATCH_STATES; + +#endif diff --git a/code/src/main.c b/code/src/main.c new file mode 100644 index 0000000..8a01b6d --- /dev/null +++ b/code/src/main.c @@ -0,0 +1,38 @@ +#include +#include +#include +#include +#include +#include + +#include "task_man.h" +#include "USART.h" +#include "AVC.h" +#include "bluetooth.h" + +int main(void) +{ +// wdt_disable(); + _delay_ms(1000); + init_task_man(); + bluetooth_init(); + USART_INIT_POLLING(); +// USART_INIT_INTERRUPT(); + AVC_init(1); + sei(); +// usart_put_c('t'); + _delay_ms(500); + AVC_add_tx_transaction_from_list(SELF_REGISTER); + sei(); + + add_task_no_arg(bluetooth_config, 0, SYSTEM_1_S, SYSTEM_1_S); +// wdt_enable( WDTO_2S ); + + while(1){ + // Reset watchdog. +// wdt_reset(); + process_tasks(); + } + +} + diff --git a/code/src/task_man.c b/code/src/task_man.c new file mode 100644 index 0000000..388f343 --- /dev/null +++ b/code/src/task_man.c @@ -0,0 +1,158 @@ +#include +#include +#include +#include "task_man.h" +#include "USART.h" + + +static task* task_array[MAX_TASK_CNT]; +static task task_array_storage[MAX_TASK_CNT]; +static task** task_array_head; +static task** task_array_tail; + +static task* task_queue_head; + +static volatile uint16_t system_time_keeper = 0; + +void init_task_man(){ + + for(uint8_t i = 0; i < MAX_TASK_CNT; i++){ + task_array[i] = &(task_array_storage[i]); + task_array_storage[i].next = NULL; + } + + task_queue_head = NULL; + task_array_head = task_array; + task_array_tail = &(task_array[MAX_TASK_CNT-1]); + + //setup timer for counting + TCNT0 = 0; //count is 0; + OCR0A = F_CPU/64000; //should resolve to 187 counts, or ~1mS + TCCR0A = 1< task_array_tail ) + return TASK_ALLOCATOR_FULL; + else{ + //allocate current task; + task * cur_task = *task_array_head; + + //null the pointer in array to the task; + *task_array_head = NULL; + + //increment to next allocator + task_array_head++; + + //check to see what king of task based on period. + if(period) + cur_task->task_type = RECURRING; + else + cur_task->task_type = ONE_SHOT; + + //set specifics about callback + cur_task->callback = function; + + //initialze remaing members + cur_task->period = period; + cur_task->timer = delay; + cur_task->next = NULL; + + //check to ensure we don't need to replace head, if so, do. + if(task_queue_head == NULL || (task_queue_head->timer > min_service_time && task_queue_head->timer > delay)){ + cur_task->next = task_queue_head; + task_queue_head = cur_task; + } + else{ + //traverse nodes, until we reach a node that excedes our min_service_time or excedes our initial delay. + task* previous = task_queue_head; + while(previous->next != NULL && previous->next->timer < min_service_time && ( delay == 0 || previous->next->timer <= delay)){ + previous = previous->next; + } + cur_task->next = previous->next; + previous->next = cur_task; + } + + } + + + return TASK_GOOD; + +} + + + +//we run this every time in our main loop to run tasks +void process_tasks(){ + + //we grab the time difference. + uint16_t time_diff = system_time_keeper; + //we reset the system timer. + system_time_keeper = 0; + + //only run if difference in time. + if(time_diff){ + //go through each node to update timer value. + task* previous = task_queue_head; + while(previous != NULL){ + if(time_diff > previous->timer) + { + previous->timer = 0; + } + else{ + previous->timer -= time_diff; + } + previous = previous->next; + } + + } + + //pop events off queue if ready. + if(task_queue_head !=NULL && task_queue_head->timer == 0) + { + + task_queue_head->callback(); + switch(task_queue_head->task_type){ + case RECURRING: + //reset period counter + task_queue_head->timer = task_queue_head->period; + task* previous = task_queue_head; + task* cur_task = task_queue_head; + //update task position + while(previous->next != NULL && previous->next->timer <= task_queue_head->timer){ + previous = previous->next; + } + if(previous != task_queue_head){ + task_queue_head = task_queue_head->next; + cur_task->next = previous->next; + previous->next = cur_task; + } + break; + case ONE_SHOT: + //remove as we ran the task. + remove_head_task(); + break; + } + } + +} + +void remove_head_task(){ + //re-cover task stack place; + task_array_head--; + + //place the task back into stack; + *task_array_head = task_queue_head; + + //update task queue + task_queue_head = task_queue_head->next; +} \ No newline at end of file diff --git a/code/src/task_man.h b/code/src/task_man.h new file mode 100644 index 0000000..4e466f1 --- /dev/null +++ b/code/src/task_man.h @@ -0,0 +1,33 @@ + +#ifndef __TASK_MAN_H +#define __TASK_MAN_H + + +#define SYSTEM_1_S 1002 +#define SYSTEM_5_ms 5 +#define SYSTEM_2_ms 2 +#define SYSTEM_20_ms 20 + +#define MAX_TASK_CNT 15 + +typedef void (*no_arg_callback)(void); + + +typedef enum TASK_TYPE {ONE_SHOT, RECURRING} TASK_TYPE; +enum TASK_ERROR_CODES {TASK_GOOD, TASK_ALLOCATOR_FULL}; + +typedef struct task{ + TASK_TYPE task_type; + no_arg_callback callback; + uint16_t period; + uint16_t timer; + + struct task* next; +}task; + +void init_task_man(void); +uint8_t add_task_no_arg(no_arg_callback, uint16_t period, uint16_t min_service_time, uint16_t delay); +void process_tasks(void); +void remove_head_task(void); + +#endif \ No newline at end of file diff --git a/eagle/.gitignore b/eagle/.gitignore new file mode 100644 index 0000000..7107dc4 --- /dev/null +++ b/eagle/.gitignore @@ -0,0 +1,33 @@ +# Compiled source # +################### +*.#* + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +Icon? +ehthumbs.db +Thumbs.db \ No newline at end of file diff --git a/eagle/AVC-LAN-2.brd b/eagle/AVC-LAN-2.brd new file mode 100644 index 0000000..469ec7d --- /dev/null +++ b/eagle/AVC-LAN-2.brd @@ -0,0 +1,2778 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Tx +5v +GND +3V3 +TX + + + +<b>AVR Devices</b><p> +Configurable logic, microcontrollers, nonvolatile memories<p> +Based on the following sources:<p> +<ul> +<li>www.atmel.com +<li>CD-ROM : Configurable Logic Microcontroller Nonvolatile Memory +<li>CadSoft download site, www.cadsoft.de or www.cadsoftusa.com , file at90smcu_v400.zip +<li>avr.lbr +</ul> +<author>Revised by librarian@cadsoft.de</author> + + +<B>Thin Plasic Quad Flat Package</B> Grid 0.8 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Resistors, Capacitors, Inductors</b><p> +Based on the previous libraries: +<ul> +<li>r.lbr +<li>cap.lbr +<li>cap-fe.lbr +<li>captant.lbr +<li>polcap.lbr +<li>ipc-smd.lbr +</ul> +All SMD packages are defined according to the IPC specifications and CECC<p> +<author>Created by librarian@cadsoft.de</author><p> +<p> +for Electrolyt Capacitors see also :<p> +www.bccomponents.com <p> +www.panasonic.com<p> +www.kemet.com<p> +http://www.secc.co.jp/pdf/os_e/2004/e_os_all.pdf <b>(SANYO)</b> +<p> +for trimmer refence see : <u>www.electrospec-inc.com/cross_references/trimpotcrossref.asp</u><p> + +<table border=0 cellspacing=0 cellpadding=0 width="100%" cellpaddding=0> +<tr valign="top"> + +<! <td width="10">&nbsp;</td> +<td width="90%"> + +<b><font color="#0000FF" size="4">TRIM-POT CROSS REFERENCE</font></b> +<P> +<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2> + <TR> + <TD COLSPAN=8> + <FONT SIZE=3 FACE=ARIAL><B>RECTANGULAR MULTI-TURN</B></FONT> + </TD> + </TR> + <TR> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">BOURNS</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">BI&nbsp;TECH</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">DALE-VISHAY</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">PHILIPS/MEPCO</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">MURATA</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">PANASONIC</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">SPECTROL</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">MILSPEC</FONT> + </B> + </TD><TD>&nbsp;</TD> + </TR> + <TR> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3 > + 3005P<BR> + 3006P<BR> + 3006W<BR> + 3006Y<BR> + 3009P<BR> + 3009W<BR> + 3009Y<BR> + 3057J<BR> + 3057L<BR> + 3057P<BR> + 3057Y<BR> + 3059J<BR> + 3059L<BR> + 3059P<BR> + 3059Y<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + 89P<BR> + 89W<BR> + 89X<BR> + 89PH<BR> + 76P<BR> + 89XH<BR> + 78SLT<BR> + 78L&nbsp;ALT<BR> + 56P&nbsp;ALT<BR> + 78P&nbsp;ALT<BR> + T8S<BR> + 78L<BR> + 56P<BR> + 78P<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + T18/784<BR> + 783<BR> + 781<BR> + -<BR> + -<BR> + -<BR> + 2199<BR> + 1697/1897<BR> + 1680/1880<BR> + 2187<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + 8035EKP/CT20/RJ-20P<BR> + -<BR> + RJ-20X<BR> + -<BR> + -<BR> + -<BR> + 1211L<BR> + 8012EKQ&nbsp;ALT<BR> + 8012EKR&nbsp;ALT<BR> + 1211P<BR> + 8012EKJ<BR> + 8012EKL<BR> + 8012EKQ<BR> + 8012EKR<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + 2101P<BR> + 2101W<BR> + 2101Y<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 2102L<BR> + 2102S<BR> + 2102Y<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + EVMCOG<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + 43P<BR> + 43W<BR> + 43Y<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 40L<BR> + 40P<BR> + 40Y<BR> + 70Y-T602<BR> + 70L<BR> + 70P<BR> + 70Y<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + RT/RTR12<BR> + RT/RTR12<BR> + RT/RTR12<BR> + -<BR> + RJ/RJR12<BR> + RJ/RJR12<BR> + RJ/RJR12<BR></FONT> + </TD> + </TR> + <TR> + <TD COLSPAN=8>&nbsp; + </TD> + </TR> + <TR> + <TD COLSPAN=8> + <FONT SIZE=4 FACE=ARIAL><B>SQUARE MULTI-TURN</B></FONT> + </TD> + </TR> + <TR> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT> + </TD> + </TR> + <TR> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 3250L<BR> + 3250P<BR> + 3250W<BR> + 3250X<BR> + 3252P<BR> + 3252W<BR> + 3252X<BR> + 3260P<BR> + 3260W<BR> + 3260X<BR> + 3262P<BR> + 3262W<BR> + 3262X<BR> + 3266P<BR> + 3266W<BR> + 3266X<BR> + 3290H<BR> + 3290P<BR> + 3290W<BR> + 3292P<BR> + 3292W<BR> + 3292X<BR> + 3296P<BR> + 3296W<BR> + 3296X<BR> + 3296Y<BR> + 3296Z<BR> + 3299P<BR> + 3299W<BR> + 3299X<BR> + 3299Y<BR> + 3299Z<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + 66P&nbsp;ALT<BR> + 66W&nbsp;ALT<BR> + 66X&nbsp;ALT<BR> + 66P&nbsp;ALT<BR> + 66W&nbsp;ALT<BR> + 66X&nbsp;ALT<BR> + -<BR> + 64W&nbsp;ALT<BR> + -<BR> + 64P&nbsp;ALT<BR> + 64W&nbsp;ALT<BR> + 64X&nbsp;ALT<BR> + 64P<BR> + 64W<BR> + 64X<BR> + 66X&nbsp;ALT<BR> + 66P&nbsp;ALT<BR> + 66W&nbsp;ALT<BR> + 66P<BR> + 66W<BR> + 66X<BR> + 67P<BR> + 67W<BR> + 67X<BR> + 67Y<BR> + 67Z<BR> + 68P<BR> + 68W<BR> + 68X<BR> + 67Y&nbsp;ALT<BR> + 67Z&nbsp;ALT<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 5050<BR> + 5091<BR> + 5080<BR> + 5087<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + T63YB<BR> + T63XB<BR> + -<BR> + -<BR> + -<BR> + 5887<BR> + 5891<BR> + 5880<BR> + -<BR> + -<BR> + -<BR> + T93Z<BR> + T93YA<BR> + T93XA<BR> + T93YB<BR> + T93XB<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 8026EKP<BR> + 8026EKW<BR> + 8026EKM<BR> + 8026EKP<BR> + 8026EKB<BR> + 8026EKM<BR> + 1309X<BR> + 1309P<BR> + 1309W<BR> + 8024EKP<BR> + 8024EKW<BR> + 8024EKN<BR> + RJ-9P/CT9P<BR> + RJ-9W<BR> + RJ-9X<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 3103P<BR> + 3103Y<BR> + 3103Z<BR> + 3103P<BR> + 3103Y<BR> + 3103Z<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 3105P/3106P<BR> + 3105W/3106W<BR> + 3105X/3106X<BR> + 3105Y/3106Y<BR> + 3105Z/3105Z<BR> + 3102P<BR> + 3102W<BR> + 3102X<BR> + 3102Y<BR> + 3102Z<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + EVMCBG<BR> + EVMCCG<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 55-1-X<BR> + 55-4-X<BR> + 55-3-X<BR> + 55-2-X<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 50-2-X<BR> + 50-4-X<BR> + 50-3-X<BR> + -<BR> + -<BR> + -<BR> + 64P<BR> + 64W<BR> + 64X<BR> + 64Y<BR> + 64Z<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + RT/RTR22<BR> + RT/RTR22<BR> + RT/RTR22<BR> + RT/RTR22<BR> + RJ/RJR22<BR> + RJ/RJR22<BR> + RJ/RJR22<BR> + RT/RTR26<BR> + RT/RTR26<BR> + RT/RTR26<BR> + RJ/RJR26<BR> + RJ/RJR26<BR> + RJ/RJR26<BR> + RJ/RJR26<BR> + RJ/RJR26<BR> + RJ/RJR26<BR> + RT/RTR24<BR> + RT/RTR24<BR> + RT/RTR24<BR> + RJ/RJR24<BR> + RJ/RJR24<BR> + RJ/RJR24<BR> + RJ/RJR24<BR> + RJ/RJR24<BR> + RJ/RJR24<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + </TR> + <TR> + <TD COLSPAN=8>&nbsp; + </TD> + </TR> + <TR> + <TD COLSPAN=8> + <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT> + </TD> + </TR> + <TR> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT> + </TD> + </TR> + <TR> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 3323P<BR> + 3323S<BR> + 3323W<BR> + 3329H<BR> + 3329P<BR> + 3329W<BR> + 3339H<BR> + 3339P<BR> + 3339W<BR> + 3352E<BR> + 3352H<BR> + 3352K<BR> + 3352P<BR> + 3352T<BR> + 3352V<BR> + 3352W<BR> + 3362H<BR> + 3362M<BR> + 3362P<BR> + 3362R<BR> + 3362S<BR> + 3362U<BR> + 3362W<BR> + 3362X<BR> + 3386B<BR> + 3386C<BR> + 3386F<BR> + 3386H<BR> + 3386K<BR> + 3386M<BR> + 3386P<BR> + 3386S<BR> + 3386W<BR> + 3386X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 25P<BR> + 25S<BR> + 25RX<BR> + 82P<BR> + 82M<BR> + 82PA<BR> + -<BR> + -<BR> + -<BR> + 91E<BR> + 91X<BR> + 91T<BR> + 91B<BR> + 91A<BR> + 91V<BR> + 91W<BR> + 25W<BR> + 25V<BR> + 25P<BR> + -<BR> + 25S<BR> + 25U<BR> + 25RX<BR> + 25X<BR> + 72XW<BR> + 72XL<BR> + 72PM<BR> + 72RX<BR> + -<BR> + 72PX<BR> + 72P<BR> + 72RXW<BR> + 72RXL<BR> + 72X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + T7YB<BR> + T7YA<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + TXD<BR> + TYA<BR> + TYP<BR> + -<BR> + TYD<BR> + TX<BR> + -<BR> + 150SX<BR> + 100SX<BR> + 102T<BR> + 101S<BR> + 190T<BR> + 150TX<BR> + 101<BR> + -<BR> + -<BR> + 101SX<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + ET6P<BR> + ET6S<BR> + ET6X<BR> + RJ-6W/8014EMW<BR> + RJ-6P/8014EMP<BR> + RJ-6X/8014EMX<BR> + TM7W<BR> + TM7P<BR> + TM7X<BR> + -<BR> + 8017SMS<BR> + -<BR> + 8017SMB<BR> + 8017SMA<BR> + -<BR> + -<BR> + CT-6W<BR> + CT-6H<BR> + CT-6P<BR> + CT-6R<BR> + -<BR> + CT-6V<BR> + CT-6X<BR> + -<BR> + -<BR> + 8038EKV<BR> + -<BR> + 8038EKX<BR> + -<BR> + -<BR> + 8038EKP<BR> + 8038EKZ<BR> + 8038EKW<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + 3321H<BR> + 3321P<BR> + 3321N<BR> + 1102H<BR> + 1102P<BR> + 1102T<BR> + RVA0911V304A<BR> + -<BR> + RVA0911H413A<BR> + RVG0707V100A<BR> + RVA0607V(H)306A<BR> + RVA1214H213A<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 3104B<BR> + 3104C<BR> + 3104F<BR> + 3104H<BR> + -<BR> + 3104M<BR> + 3104P<BR> + 3104S<BR> + 3104W<BR> + 3104X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + EVMQ0G<BR> + EVMQIG<BR> + EVMQ3G<BR> + EVMS0G<BR> + EVMQ0G<BR> + EVMG0G<BR> + -<BR> + -<BR> + -<BR> + EVMK4GA00B<BR> + EVM30GA00B<BR> + EVMK0GA00B<BR> + EVM38GA00B<BR> + EVMB6<BR> + EVLQ0<BR> + -<BR> + EVMMSG<BR> + EVMMBG<BR> + EVMMAG<BR> + -<BR> + -<BR> + EVMMCS<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + EVMM1<BR> + -<BR> + -<BR> + EVMM0<BR> + -<BR> + -<BR> + EVMM3<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + 62-3-1<BR> + 62-1-2<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 67R<BR> + -<BR> + 67P<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 67X<BR> + 63V<BR> + 63S<BR> + 63M<BR> + -<BR> + -<BR> + 63H<BR> + 63P<BR> + -<BR> + -<BR> + 63X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + RJ/RJR50<BR> + RJ/RJR50<BR> + RJ/RJR50<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + </TR> +</TABLE> +<P>&nbsp;<P> +<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3> + <TR> + <TD COLSPAN=7> + <FONT color="#0000FF" SIZE=4 FACE=ARIAL><B>SMD TRIM-POT CROSS REFERENCE</B></FONT> + <P> + <FONT SIZE=4 FACE=ARIAL><B>MULTI-TURN</B></FONT> + </TD> + </TR> + <TR> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT> + </TD> + </TR> + <TR> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 3224G<BR> + 3224J<BR> + 3224W<BR> + 3269P<BR> + 3269W<BR> + 3269X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 44G<BR> + 44J<BR> + 44W<BR> + 84P<BR> + 84W<BR> + 84X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + ST63Z<BR> + ST63Y<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + ST5P<BR> + ST5W<BR> + ST5X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + </TR> + <TR> + <TD COLSPAN=7>&nbsp; + </TD> + </TR> + <TR> + <TD COLSPAN=7> + <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT> + </TD> + </TR> + <TR> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT> + </TD> + </TR> + <TR> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 3314G<BR> + 3314J<BR> + 3364A/B<BR> + 3364C/D<BR> + 3364W/X<BR> + 3313G<BR> + 3313J<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 23B<BR> + 23A<BR> + 21X<BR> + 21W<BR> + -<BR> + 22B<BR> + 22A<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + ST5YL/ST53YL<BR> + ST5YJ/5T53YJ<BR> + ST-23A<BR> + ST-22B<BR> + ST-22<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + ST-4B<BR> + ST-4A<BR> + -<BR> + -<BR> + -<BR> + ST-3B<BR> + ST-3A<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + EVM-6YS<BR> + EVM-1E<BR> + EVM-1G<BR> + EVM-1D<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + G4B<BR> + G4A<BR> + TR04-3S1<BR> + TRG04-2S1<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + DVR-43A<BR> + CVR-42C<BR> + CVR-42A/C<BR> + -<BR> + -<BR></FONT> + </TD> + </TR> +</TABLE> +<P> +<FONT SIZE=4 FACE=ARIAL><B>ALT =&nbsp;ALTERNATE</B></FONT> +<P> + +&nbsp; +<P> +</td> +</tr> +</table> + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + + + +<b>Linear Technology Devices</b><p> +http://www.linear-tech.com<p> +<author>Created by librarian@cadsoft.de</author> + + +<b>Small Outline IC</b> + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + +<b>Small Outline Transistor</b> + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + +<b>AVR Devices</b><p> +Version 7 - August 1, 2011.<br><br> +Added ATmega164P/324P/644P devices for DIP and TQFP. +<p> +Version 4 - March 11, 2008.<br><br> +This library now includes ONLY ATMEL AVR microcontrollers. It is the result of merging all other available device libraries available at http://www.cadsoft.de/download as of the time it was made. In addition to the legacy AT90* devices, it includes most ATMEGA devices including the new 48/88/168, most ATTiny devices and a set of ISP and JTAG pin headers.<p> +Based on the following sources:<p> +<ul> +<li>www.atmel.com +<li> file at90smcu_v400.zip +<li>avr.lbr and atmel.lbr as provided by CadSoft +<li>avr-1.lbr by David Blundell +<li>avr-2.lbr by Boris Zalokar +<li>avr-3.lbr by Carson Reynolds +<li>attiny24_44_84.lbr by Pawel Szramowski (ATTiny24/44/84 devices) +<li>atmel.lbr by Bob Starr (ISP headers) +<li>moates_custom_parts.lbr (edge ISP) +<li>other misc sources +</ul> +<author>Revised by David Blundell (blundar at gmail dot com) and others.</author> +<p> +<author>Added Mega162, Tiny2313 John Lussmyer (cougar at casadelgato.com)</author> +<p> +<author>Added XMega A1,A3,A4,D3,D4 John Lussmyer Aug 1, 2011(cougar at casadelgato.com)</author> + + +<b>PIN HEADER</b><p> AVR ISP 10 Pin, 0.1" Right Angle + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + +<b>Pin Header Connectors</b><p> +<author>Created by librarian@cadsoft.de</author> + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>High Power Density, High Efficiency, Shielded Inductors</b><p> +Source: coiltronics_dr_series.pdf + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + +<b>SMA</b> CASE 403D-02<p> +Source: http://www.onsemi.com/pub_link/Collateral/MBRA340T3-D.PDF + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + +<b>Chip Capacitor Type KEMET D / EIA 7343-21</b><p> +KEMET V / EIA 7343-20, KEMET X / EIA 7343-43 Wafe solder + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor Type KEMET C / EIA 6032-28 reflow solder</b><p>KEMET U / EIA 6032-15 + + + + + + +>NAME +>VALUE + + + + + + + +<b>Murata Filters</b><p> +Distributor RS Components<p> +<author>Created by librarian@cadsoft.de</author> + + +Source: http://search.murata.co.jp/Ceramy/CatalogshowpageAction.do?sDirnm=A07X&sFilnm=81G07006&sType=2&sLang=en&sNHinnm=CSTCR6M00G53Z-R0&sCapt=Standard_Land_Pattern_Dimensions + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + +<b>Lumberg Connectors</b><p> +include con-mfs.lbr - 2001.03.22<br> +Jack connectors - 2005.11.23<p> +http://www.lumberg.de<p> +<author>Created by librarian@cadsoft.de</author> + + +<b>Jack connectors according to JISC 6560, 2.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 2,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/1501_03.pdf + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + +<h3>SparkFun Electronics' preferred foot prints</h3> +We've spent an enormous amount of time creating and checking these footprints and parts. If you enjoy using this library, please buy one of our products at www.sparkfun.com. +<br><br> +<b>Licensing:</b> CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>Name +>Value + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>EAGLE Design Rules</b> +<p> +Die Standard-Design-Rules sind so gewählt, dass sie für +die meisten Anwendungen passen. Sollte ihre Platine +besondere Anforderungen haben, treffen Sie die erforderlichen +Einstellungen hier und speichern die Design Rules unter +einem neuen Namen ab. +<b>EAGLE Design Rules</b> +<p> +The default Design Rules have been set to cover +a wide range of applications. Your particular design +may have different requirements, so please make the +necessary adjustments and save your customized +design rules under a new name. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eagle/AVC-LAN-2.sch b/eagle/AVC-LAN-2.sch new file mode 100644 index 0000000..9675259 --- /dev/null +++ b/eagle/AVC-LAN-2.sch @@ -0,0 +1,14460 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>AVR Devices</b><p> +Configurable logic, microcontrollers, nonvolatile memories<p> +Based on the following sources:<p> +<ul> +<li>www.atmel.com +<li>CD-ROM : Configurable Logic Microcontroller Nonvolatile Memory +<li>CadSoft download site, www.cadsoft.de or www.cadsoftusa.com , file at90smcu_v400.zip +<li>avr.lbr +</ul> +<author>Revised by librarian@cadsoft.de</author> + + +<b>32M1-A</b> Micro Lead Frame package (MLF) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<B>Thin Plasic Quad Flat Package</B> Grid 0.8 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MICROCONTROLLER</b><p> +8 Kbytes FLASH, 1 kbytes SRAM, 512 bytes EEPROM, USART, 6-channel 10 bit ADC, 2-channel 8 bit ADC<br> +Pin compatible with Atmega48, ATMega88, ATMega168<br> +Source: avr.lbr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Supply Symbols</b><p> + GND, VCC, 0V, +5V, -5V, etc.<p> + Please keep in mind, that these devices are necessary for the + automatic wiring of the supply signals.<p> + The pin name defined in the symbol is identical to the net which is to be wired automatically.<p> + In this library the device names are the same as the pin names of the symbols, therefore the correct signal names appear next to the supply symbols in the schematic.<p> + <author>Created by librarian@cadsoft.de</author> + + + + + +>VALUE + + + + + +<b>SUPPLY SYMBOL</b> + + + + + + + + + + + + + + +<b>Linear Technology Devices</b><p> +http://www.linear-tech.com<p> +<author>Created by librarian@cadsoft.de</author> + + +<b>Dual In Line Package</b> + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Small Outline IC</b> + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + +<b>Small Outline Transistor</b> + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +GND +>NAME +>VALUE + + + + + +>NAME + + + + + +<b>Low Power RS485 Interface Transceiver</b><p> +Source: http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1007,C1017,P2064,D1718 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>1.5A, Low Noise, Fast Transient Response LDO Regulator</b><p> +Source: http://www.linear.com/pc/downloadDocument.do?navId=H0,C3,P2222,D3148 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Resistors, Capacitors, Inductors</b><p> +Based on the previous libraries: +<ul> +<li>r.lbr +<li>cap.lbr +<li>cap-fe.lbr +<li>captant.lbr +<li>polcap.lbr +<li>ipc-smd.lbr +</ul> +All SMD packages are defined according to the IPC specifications and CECC<p> +<author>Created by librarian@cadsoft.de</author><p> +<p> +for Electrolyt Capacitors see also :<p> +www.bccomponents.com <p> +www.panasonic.com<p> +www.kemet.com<p> +http://www.secc.co.jp/pdf/os_e/2004/e_os_all.pdf <b>(SANYO)</b> +<p> +for trimmer refence see : <u>www.electrospec-inc.com/cross_references/trimpotcrossref.asp</u><p> + +<table border=0 cellspacing=0 cellpadding=0 width="100%" cellpaddding=0> +<tr valign="top"> + +<! <td width="10">&nbsp;</td> +<td width="90%"> + +<b><font color="#0000FF" size="4">TRIM-POT CROSS REFERENCE</font></b> +<P> +<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2> + <TR> + <TD COLSPAN=8> + <FONT SIZE=3 FACE=ARIAL><B>RECTANGULAR MULTI-TURN</B></FONT> + </TD> + </TR> + <TR> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">BOURNS</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">BI&nbsp;TECH</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">DALE-VISHAY</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">PHILIPS/MEPCO</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">MURATA</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">PANASONIC</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">SPECTROL</FONT> + </B> + </TD> + <TD ALIGN=CENTER> + <B> + <FONT SIZE=3 FACE=ARIAL color="#FF0000">MILSPEC</FONT> + </B> + </TD><TD>&nbsp;</TD> + </TR> + <TR> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3 > + 3005P<BR> + 3006P<BR> + 3006W<BR> + 3006Y<BR> + 3009P<BR> + 3009W<BR> + 3009Y<BR> + 3057J<BR> + 3057L<BR> + 3057P<BR> + 3057Y<BR> + 3059J<BR> + 3059L<BR> + 3059P<BR> + 3059Y<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + 89P<BR> + 89W<BR> + 89X<BR> + 89PH<BR> + 76P<BR> + 89XH<BR> + 78SLT<BR> + 78L&nbsp;ALT<BR> + 56P&nbsp;ALT<BR> + 78P&nbsp;ALT<BR> + T8S<BR> + 78L<BR> + 56P<BR> + 78P<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + T18/784<BR> + 783<BR> + 781<BR> + -<BR> + -<BR> + -<BR> + 2199<BR> + 1697/1897<BR> + 1680/1880<BR> + 2187<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + 8035EKP/CT20/RJ-20P<BR> + -<BR> + RJ-20X<BR> + -<BR> + -<BR> + -<BR> + 1211L<BR> + 8012EKQ&nbsp;ALT<BR> + 8012EKR&nbsp;ALT<BR> + 1211P<BR> + 8012EKJ<BR> + 8012EKL<BR> + 8012EKQ<BR> + 8012EKR<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + 2101P<BR> + 2101W<BR> + 2101Y<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 2102L<BR> + 2102S<BR> + 2102Y<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + EVMCOG<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + 43P<BR> + 43W<BR> + 43Y<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 40L<BR> + 40P<BR> + 40Y<BR> + 70Y-T602<BR> + 70L<BR> + 70P<BR> + 70Y<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + RT/RTR12<BR> + RT/RTR12<BR> + RT/RTR12<BR> + -<BR> + RJ/RJR12<BR> + RJ/RJR12<BR> + RJ/RJR12<BR></FONT> + </TD> + </TR> + <TR> + <TD COLSPAN=8>&nbsp; + </TD> + </TR> + <TR> + <TD COLSPAN=8> + <FONT SIZE=4 FACE=ARIAL><B>SQUARE MULTI-TURN</B></FONT> + </TD> + </TR> + <TR> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT> + </TD> + </TR> + <TR> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 3250L<BR> + 3250P<BR> + 3250W<BR> + 3250X<BR> + 3252P<BR> + 3252W<BR> + 3252X<BR> + 3260P<BR> + 3260W<BR> + 3260X<BR> + 3262P<BR> + 3262W<BR> + 3262X<BR> + 3266P<BR> + 3266W<BR> + 3266X<BR> + 3290H<BR> + 3290P<BR> + 3290W<BR> + 3292P<BR> + 3292W<BR> + 3292X<BR> + 3296P<BR> + 3296W<BR> + 3296X<BR> + 3296Y<BR> + 3296Z<BR> + 3299P<BR> + 3299W<BR> + 3299X<BR> + 3299Y<BR> + 3299Z<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + 66P&nbsp;ALT<BR> + 66W&nbsp;ALT<BR> + 66X&nbsp;ALT<BR> + 66P&nbsp;ALT<BR> + 66W&nbsp;ALT<BR> + 66X&nbsp;ALT<BR> + -<BR> + 64W&nbsp;ALT<BR> + -<BR> + 64P&nbsp;ALT<BR> + 64W&nbsp;ALT<BR> + 64X&nbsp;ALT<BR> + 64P<BR> + 64W<BR> + 64X<BR> + 66X&nbsp;ALT<BR> + 66P&nbsp;ALT<BR> + 66W&nbsp;ALT<BR> + 66P<BR> + 66W<BR> + 66X<BR> + 67P<BR> + 67W<BR> + 67X<BR> + 67Y<BR> + 67Z<BR> + 68P<BR> + 68W<BR> + 68X<BR> + 67Y&nbsp;ALT<BR> + 67Z&nbsp;ALT<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 5050<BR> + 5091<BR> + 5080<BR> + 5087<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + T63YB<BR> + T63XB<BR> + -<BR> + -<BR> + -<BR> + 5887<BR> + 5891<BR> + 5880<BR> + -<BR> + -<BR> + -<BR> + T93Z<BR> + T93YA<BR> + T93XA<BR> + T93YB<BR> + T93XB<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 8026EKP<BR> + 8026EKW<BR> + 8026EKM<BR> + 8026EKP<BR> + 8026EKB<BR> + 8026EKM<BR> + 1309X<BR> + 1309P<BR> + 1309W<BR> + 8024EKP<BR> + 8024EKW<BR> + 8024EKN<BR> + RJ-9P/CT9P<BR> + RJ-9W<BR> + RJ-9X<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 3103P<BR> + 3103Y<BR> + 3103Z<BR> + 3103P<BR> + 3103Y<BR> + 3103Z<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 3105P/3106P<BR> + 3105W/3106W<BR> + 3105X/3106X<BR> + 3105Y/3106Y<BR> + 3105Z/3105Z<BR> + 3102P<BR> + 3102W<BR> + 3102X<BR> + 3102Y<BR> + 3102Z<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + EVMCBG<BR> + EVMCCG<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 55-1-X<BR> + 55-4-X<BR> + 55-3-X<BR> + 55-2-X<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 50-2-X<BR> + 50-4-X<BR> + 50-3-X<BR> + -<BR> + -<BR> + -<BR> + 64P<BR> + 64W<BR> + 64X<BR> + 64Y<BR> + 64Z<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + RT/RTR22<BR> + RT/RTR22<BR> + RT/RTR22<BR> + RT/RTR22<BR> + RJ/RJR22<BR> + RJ/RJR22<BR> + RJ/RJR22<BR> + RT/RTR26<BR> + RT/RTR26<BR> + RT/RTR26<BR> + RJ/RJR26<BR> + RJ/RJR26<BR> + RJ/RJR26<BR> + RJ/RJR26<BR> + RJ/RJR26<BR> + RJ/RJR26<BR> + RT/RTR24<BR> + RT/RTR24<BR> + RT/RTR24<BR> + RJ/RJR24<BR> + RJ/RJR24<BR> + RJ/RJR24<BR> + RJ/RJR24<BR> + RJ/RJR24<BR> + RJ/RJR24<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + </TR> + <TR> + <TD COLSPAN=8>&nbsp; + </TD> + </TR> + <TR> + <TD COLSPAN=8> + <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT> + </TD> + </TR> + <TR> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT> + </TD> + <TD ALIGN=CENTER> + <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT> + </TD> + </TR> + <TR> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 3323P<BR> + 3323S<BR> + 3323W<BR> + 3329H<BR> + 3329P<BR> + 3329W<BR> + 3339H<BR> + 3339P<BR> + 3339W<BR> + 3352E<BR> + 3352H<BR> + 3352K<BR> + 3352P<BR> + 3352T<BR> + 3352V<BR> + 3352W<BR> + 3362H<BR> + 3362M<BR> + 3362P<BR> + 3362R<BR> + 3362S<BR> + 3362U<BR> + 3362W<BR> + 3362X<BR> + 3386B<BR> + 3386C<BR> + 3386F<BR> + 3386H<BR> + 3386K<BR> + 3386M<BR> + 3386P<BR> + 3386S<BR> + 3386W<BR> + 3386X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 25P<BR> + 25S<BR> + 25RX<BR> + 82P<BR> + 82M<BR> + 82PA<BR> + -<BR> + -<BR> + -<BR> + 91E<BR> + 91X<BR> + 91T<BR> + 91B<BR> + 91A<BR> + 91V<BR> + 91W<BR> + 25W<BR> + 25V<BR> + 25P<BR> + -<BR> + 25S<BR> + 25U<BR> + 25RX<BR> + 25X<BR> + 72XW<BR> + 72XL<BR> + 72PM<BR> + 72RX<BR> + -<BR> + 72PX<BR> + 72P<BR> + 72RXW<BR> + 72RXL<BR> + 72X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + T7YB<BR> + T7YA<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + TXD<BR> + TYA<BR> + TYP<BR> + -<BR> + TYD<BR> + TX<BR> + -<BR> + 150SX<BR> + 100SX<BR> + 102T<BR> + 101S<BR> + 190T<BR> + 150TX<BR> + 101<BR> + -<BR> + -<BR> + 101SX<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + ET6P<BR> + ET6S<BR> + ET6X<BR> + RJ-6W/8014EMW<BR> + RJ-6P/8014EMP<BR> + RJ-6X/8014EMX<BR> + TM7W<BR> + TM7P<BR> + TM7X<BR> + -<BR> + 8017SMS<BR> + -<BR> + 8017SMB<BR> + 8017SMA<BR> + -<BR> + -<BR> + CT-6W<BR> + CT-6H<BR> + CT-6P<BR> + CT-6R<BR> + -<BR> + CT-6V<BR> + CT-6X<BR> + -<BR> + -<BR> + 8038EKV<BR> + -<BR> + 8038EKX<BR> + -<BR> + -<BR> + 8038EKP<BR> + 8038EKZ<BR> + 8038EKW<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + 3321H<BR> + 3321P<BR> + 3321N<BR> + 1102H<BR> + 1102P<BR> + 1102T<BR> + RVA0911V304A<BR> + -<BR> + RVA0911H413A<BR> + RVG0707V100A<BR> + RVA0607V(H)306A<BR> + RVA1214H213A<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 3104B<BR> + 3104C<BR> + 3104F<BR> + 3104H<BR> + -<BR> + 3104M<BR> + 3104P<BR> + 3104S<BR> + 3104W<BR> + 3104X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + EVMQ0G<BR> + EVMQIG<BR> + EVMQ3G<BR> + EVMS0G<BR> + EVMQ0G<BR> + EVMG0G<BR> + -<BR> + -<BR> + -<BR> + EVMK4GA00B<BR> + EVM30GA00B<BR> + EVMK0GA00B<BR> + EVM38GA00B<BR> + EVMB6<BR> + EVLQ0<BR> + -<BR> + EVMMSG<BR> + EVMMBG<BR> + EVMMAG<BR> + -<BR> + -<BR> + EVMMCS<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + EVMM1<BR> + -<BR> + -<BR> + EVMM0<BR> + -<BR> + -<BR> + EVMM3<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + 62-3-1<BR> + 62-1-2<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 67R<BR> + -<BR> + 67P<BR> + -<BR> + -<BR> + -<BR> + -<BR> + 67X<BR> + 63V<BR> + 63S<BR> + 63M<BR> + -<BR> + -<BR> + 63H<BR> + 63P<BR> + -<BR> + -<BR> + 63X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + RJ/RJR50<BR> + RJ/RJR50<BR> + RJ/RJR50<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + </TR> +</TABLE> +<P>&nbsp;<P> +<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3> + <TR> + <TD COLSPAN=7> + <FONT color="#0000FF" SIZE=4 FACE=ARIAL><B>SMD TRIM-POT CROSS REFERENCE</B></FONT> + <P> + <FONT SIZE=4 FACE=ARIAL><B>MULTI-TURN</B></FONT> + </TD> + </TR> + <TR> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT> + </TD> + </TR> + <TR> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 3224G<BR> + 3224J<BR> + 3224W<BR> + 3269P<BR> + 3269W<BR> + 3269X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 44G<BR> + 44J<BR> + 44W<BR> + 84P<BR> + 84W<BR> + 84X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + ST63Z<BR> + ST63Y<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + ST5P<BR> + ST5W<BR> + ST5X<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + </TR> + <TR> + <TD COLSPAN=7>&nbsp; + </TD> + </TR> + <TR> + <TD COLSPAN=7> + <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT> + </TD> + </TR> + <TR> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT> + </TD> + <TD> + <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT> + </TD> + </TR> + <TR> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 3314G<BR> + 3314J<BR> + 3364A/B<BR> + 3364C/D<BR> + 3364W/X<BR> + 3313G<BR> + 3313J<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + 23B<BR> + 23A<BR> + 21X<BR> + 21W<BR> + -<BR> + 22B<BR> + 22A<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + ST5YL/ST53YL<BR> + ST5YJ/5T53YJ<BR> + ST-23A<BR> + ST-22B<BR> + ST-22<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + ST-4B<BR> + ST-4A<BR> + -<BR> + -<BR> + -<BR> + ST-3B<BR> + ST-3A<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + EVM-6YS<BR> + EVM-1E<BR> + EVM-1G<BR> + EVM-1D<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + G4B<BR> + G4A<BR> + TR04-3S1<BR> + TRG04-2S1<BR> + -<BR> + -<BR> + -<BR></FONT> + </TD> + <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> + -<BR> + -<BR> + DVR-43A<BR> + CVR-42C<BR> + CVR-42A/C<BR> + -<BR> + -<BR></FONT> + </TD> + </TR> +</TABLE> +<P> +<FONT SIZE=4 FACE=ARIAL><B>ALT =&nbsp;ALTERNATE</B></FONT> +<P> + +&nbsp; +<P> +</td> +</tr> +</table> + + +<b>RESISTOR</b><p> +type 0204, grid 5 mm + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +type 0204, grid 7.5 mm + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +type 0204, grid 2.5 mm + + + + + + +>NAME +>VALUE + + +<b>RESISTOR</b><p> +type 0207, grid 10 mm + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +type 0207, grid 12 mm + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + +<b>RESISTOR</b><p> +type 0207, grid 15mm + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + +<b>RESISTOR</b><p> +type 0207, grid 2.5 mm + + + + + + + +>NAME +>VALUE + + +<b>RESISTOR</b><p> +type 0207, grid 5 mm + + + + + + + +>NAME +>VALUE + + +<b>RESISTOR</b><p> +type 0207, grid 7.5 mm + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +Pad definition corrected 2006.05.15, librarian@cadsoft.de + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>CAPACITOR</b><p> +grid 2.5 mm, outline 2.4 x 4.4 mm + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 2.5 mm, outline 2.5 x 5 mm + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 2.5 mm, outline 3 x 5 mm + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 2.5 mm, outline 4 x 5 mm + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 2.5 mm, outline 5 x 5 mm + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 2.5 mm, outline 6 x 5 mm + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 2.5 mm + 5 mm, outline 2.4 x 7 mm + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 2.5 + 5 mm, outline 2.5 x 7.5 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 2.5 + 5 mm, outline 3.5 x 7.5 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 2.5 + 5 mm, outline 4.5 x 7.5 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 2.5 + 5 mm, outline 5.5 x 7.5 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 5 mm, outline 2.4 x 4.4 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>CAPACITOR</b><p> +grid 5 mm, outline 2.5 x 7.5 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 5 mm, outline 4.5 x 7.5 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 5 mm, outline 3 x 7.5 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 5 mm, outline 5 x 7.5 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 5 mm, outline 5.5 x 7.5 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 5 mm, outline 7.5 x 7.5 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +Horizontal, grid 5 mm, outline 7.5 x 7.5 mm + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>CAPACITOR</b><p> +grid 7.5 mm, outline 3.2 x 10.3 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 7.5 mm, outline 4.2 x 10.3 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 7.5 mm, outline 5.2 x 10.6 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 10.2 mm, outline 4.3 x 13.3 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 10.2 mm, outline 5.4 x 13.3 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 10.2 mm, outline 6.4 x 13.3 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 10.2 mm + 15.2 mm, outline 6.2 x 18.4 mm + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 15 mm, outline 5.4 x 18.3 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 15 mm, outline 6.4 x 18.3 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 15 mm, outline 7.2 x 18.3 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 15 mm, outline 8.4 x 18.3 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 15 mm, outline 9.1 x 18.2 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 22.5 mm, outline 6.2 x 26.8 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 22.5 mm, outline 7.4 x 26.8 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 22.5 mm, outline 8.7 x 26.8 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 22.5 mm, outline 10.8 x 26.8 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 22.5 mm, outline 11.3 x 26.8 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 27.5 mm, outline 9.3 x 31.6 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 27.5 mm, outline 11.3 x 31.6 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 27.5 mm, outline 13.4 x 31.6 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 27.5 mm, outline 20.5 x 31.6 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 32.5 mm, outline 13.7 x 37.4 mm + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 32.5 mm, outline 16.2 x 37.4 mm + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 32.5 mm, outline 18.2 x 37.4 mm + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 37.5 mm, outline 19.2 x 41.8 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 37.5 mm, outline 20.3 x 41.8 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 5 mm, outline 3.5 x 7.5 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 37.5 mm, outline 15.5 x 41.8 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 7.5 mm, outline 6.3 x 10.6 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 27.5 mm, outline 15.4 x 31.6 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CAPACITOR</b><p> +grid 27.5 mm, outline 17.3 x 31.6 mm + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Ceramic Chip Capacitor KEMET 0204 Reflow solder</b><p> +Metric Code Size 1005 + + + + +>NAME +>VALUE + + + + +<b>Ceramic Chip Capacitor KEMET 0603 Reflow solder</b><p> +Metric Code Size 1608 + + + + +>NAME +>VALUE + + + + +<b>Ceramic Chip Capacitor KEMET 0805 Reflow solder</b><p> +Metric Code Size 2012 + + + + +>NAME +>VALUE + + + + +<b>Ceramic Chip Capacitor KEMET 1206 Reflow solder</b><p> +Metric Code Size 3216 + + + + +>NAME +>VALUE + + + + +<b>Ceramic Chip Capacitor KEMET 1210 Reflow solder</b><p> +Metric Code Size 3225 + + + + +>NAME +>VALUE + + + + +<b>Ceramic Chip Capacitor KEMET 1812 Reflow solder</b><p> +Metric Code Size 4532 + + + + +>NAME +>VALUE + + + + +<b>Ceramic Chip Capacitor KEMET 1825 Reflow solder</b><p> +Metric Code Size 4564 + + + + +>NAME +>VALUE + + + + +<b>Ceramic Chip Capacitor KEMET 2220 Reflow solder</b><p> +Metric Code Size 5650 + + + + +>NAME +>VALUE + + + + +<b>Ceramic Chip Capacitor KEMET 2225 Reflow solder</b><p> +Metric Code Size 5664 + + + + +>NAME +>VALUE + + + + +Source: http://www.avxcorp.com/docs/catalogs/cx5r.pdf + + +>NAME +>VALUE + + + + + + +<b>RESISTOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +Pad definition corrected 2006.05.15, librarian@cadsoft.de + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b> wave soldering<p> +Pad definition corrected 2006.05.15, librarian@cadsoft.de + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip, wave soldering + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip, wave soldering + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +chip, wave soldering + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip, wave soldering + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip, wave soldering + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip, wave soldering + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip, wave soldering + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip, wave soldering + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +chip, wave soldering + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +MELF 0.10 W + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +MELF 0.25 W + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +MELF 0.12 W + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +MELF 0.10 W + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +MELF 0.25 W + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +MELF 0.25 W + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +MELF 0.12 W + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +MELF 0.25 W + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b><p> +type 0309, grid 10mm + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +type 0309, grid 12.5 mm + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +type 0411, grid 12.5 mm + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +type 0411, grid 15 mm + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +type 0411, grid 3.81 mm + + + + + + +>NAME +>VALUE + + + +<b>RESISTOR</b><p> +type 0414, grid 15 mm + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +type 0414, grid 5 mm + + + + + + +>NAME +>VALUE + + + +<b>RESISTOR</b><p> +type 0617, grid 17.5 mm + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +type 0617, grid 22.5 mm + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +type 0617, grid 5 mm + + + + + + +>NAME +>VALUE + + + +<b>RESISTOR</b><p> +type 0922, grid 22.5 mm + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + +<b>RESISTOR</b><p> +type 0613, grid 5 mm + + + + + + +>NAME +>VALUE + + + +<b>RESISTOR</b><p> +type 0613, grid 15 mm + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +type 0817, grid 22.5 mm + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +0817 + + + + +<b>RESISTOR</b><p> +type 0817, grid 6.35 mm + + + + + + +>NAME +>VALUE +0817 + + + +<b>RESISTOR</b><p> +type V234, grid 12.5 mm + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +type V235, grid 17.78 mm + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>RESISTOR</b><p> +type V526-0, grid 2.5 mm + + + + + + + + + + +>NAME +>VALUE + + +<b>Mini MELF 0102 Axial</b> + + + + +>NAME +>VALUE + + + +<b>RESISTOR</b><p> +type 0922, grid 7.5 mm + + + + + + +>NAME +>VALUE +0922 + + + +<b>CECC Size RC2211</b> Reflow Soldering<p> +source Beyschlag + + + + + + +>NAME +>VALUE + + +<b>CECC Size RC2211</b> Wave Soldering<p> +source Beyschlag + + + + + + +>NAME +>VALUE + + +<b>CECC Size RC3715</b> Reflow Soldering<p> +source Beyschlag + + + + + + +>NAME +>VALUE + + +<b>CECC Size RC3715</b> Wave Soldering<p> +source Beyschlag + + + + + + +>NAME +>VALUE + + +<b>CECC Size RC6123</b> Reflow Soldering<p> +source Beyschlag + + + + + + +>NAME +>VALUE + + +<b>CECC Size RC6123</b> Wave Soldering<p> +source Beyschlag + + + + + + +>NAME +>VALUE + + +<b>RESISTOR</b><p> +type RDH, grid 15 mm + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +RDH + + + + +<b>RESISTOR</b><p> +type 0309, grid 2.5 mm + + + + + + +>NAME +>VALUE + + + + + +<b>RESISTOR</b> chip<p> +Source: http://www.vishay.com/docs/20008/dcrcw.pdf + + +>NAME +>VALUE + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + +<B>CAPACITOR</B>, American symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<B>RESISTOR</B>, American symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Supply Symbols</b><p> + GND, VCC, 0V, +5V, -5V, etc.<p> + Please keep in mind, that these devices are necessary for the + automatic wiring of the supply signals.<p> + The pin name defined in the symbol is identical to the net which is to be wired automatically.<p> + In this library the device names are the same as the pin names of the symbols, therefore the correct signal names appear next to the supply symbols in the schematic.<p> + <author>Copyright (C) 2007, Bob Starr<br>http://www.bobstarr.net</author> + + + + + +>VALUE + + + + +>VALUE + + + + +>VALUE + + + + + +<b>SUPPLY SYMBOL</b> + + + + + + + + + + + + +<b>SUPPLY SYMBOL</b> + + + + + + + + + + + + +<b>SUPPLY SYMBOL</b> + + + + + + + + + + + + + + +<b>AVR Devices</b><p> +Version 7 - August 1, 2011.<br><br> +Added ATmega164P/324P/644P devices for DIP and TQFP. +<p> +Version 4 - March 11, 2008.<br><br> +This library now includes ONLY ATMEL AVR microcontrollers. It is the result of merging all other available device libraries available at http://www.cadsoft.de/download as of the time it was made. In addition to the legacy AT90* devices, it includes most ATMEGA devices including the new 48/88/168, most ATTiny devices and a set of ISP and JTAG pin headers.<p> +Based on the following sources:<p> +<ul> +<li>www.atmel.com +<li> file at90smcu_v400.zip +<li>avr.lbr and atmel.lbr as provided by CadSoft +<li>avr-1.lbr by David Blundell +<li>avr-2.lbr by Boris Zalokar +<li>avr-3.lbr by Carson Reynolds +<li>attiny24_44_84.lbr by Pawel Szramowski (ATTiny24/44/84 devices) +<li>atmel.lbr by Bob Starr (ISP headers) +<li>moates_custom_parts.lbr (edge ISP) +<li>other misc sources +</ul> +<author>Revised by David Blundell (blundar at gmail dot com) and others.</author> +<p> +<author>Added Mega162, Tiny2313 John Lussmyer (cougar at casadelgato.com)</author> +<p> +<author>Added XMega A1,A3,A4,D3,D4 John Lussmyer Aug 1, 2011(cougar at casadelgato.com)</author> + + +<b>PIN HEADER</b><p> AVR ISP 10 Pin, 0.1" Straight + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + +<b>PIN HEADER</b><p> AVR ISP 10 Pin, 0.1" Right Angle + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +AVR ISP +MOSI +MISO +SCK +RST +VTG +GND +GND +GND +GND +GND + + + + + + + + + + + + + + +<b>AVR ISP-10</b><p> Serial Programming Header + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Pin Header Connectors</b><p> +<author>Created by librarian@cadsoft.de</author> + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>PIN HEADER</b> + + + + + + + + + + + +>NAME +>VALUE + + + + + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + +>NAME +>VALUE + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + + + + + + + + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>PIN HEADER</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>TANTALUM CAPACITOR</b> + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>TANTALUM CAPACITOR</b> + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>TANTALUM CAPACITOR</b> + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>TANTALUM CAPACITOR</b> + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +body 5 x 5 mm, rectangle, grid 2.54 mm + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +body 7.6 x 5 mm, rectangle, grid 5.08 mm + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +body 12.7 x 7.6 mm, rectangle, grid 10.16 mm + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +body 12.5 x 12.5 mm, rectangle, grid 10.16 mm + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 4 mm, grid 2.54 mm + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 4 mm, grid 2.54 mm + + + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 5 mm, grid 2.54 mm + + + + + + + + + + + + +>NAME +>VALUE +TT + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 6 mm, grid 2.54 mm + + + + + + + + + + + + +>NAME +>VALUE +TT + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 6 mm, grid 2.54 mm + + + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 7 mm, grid 2.54 mm + + + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 7 mm, grid 2.54 mm + + + + + + + + + + + + +>NAME +>VALUE +TT + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 10 mm, grid 5.08 mm + + + + + + + + + + + + +>NAME +>VALUE +TT + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 11 mm, grid 5.08 mm + + + + + + + + + + + + +>NAME +>VALUE +TT + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 11 mm, grid 5.08 mm + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 6 mm, grid 5.08 mm + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 6 mm, grid 5.08 mm + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 7 mm, grid 5.08 mm + + + + + + + + + + + + +>NAME +>VALUE +TT + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 7 mm, grid 5.08 mm + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 9 mm, grid 5.08 mm + + + + + + + + + + + + +>NAME +>VALUE +TT + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 9 mm, grid 5.08 mm + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +rectangle, grid 2.54 mm + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +rectangle, grid 5.08 mm + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +rectangle, grid 5.08 mm + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +rectangle, grid 10.16 mm + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +rectangle, grid 10.16 mm + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 4.5 mm, grid 5.08 mm + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 5.0 mm, grid 5.08 mm + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 7.0 mm, grid 5.08 mm + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 6.0 mm, grid 5.08 mm + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 8.0 mm, grid 5.08 mm + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 1.8 mm, diameter 4 mm + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 15.24 mm, diameter 5 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 15.24 mm, diameter 6 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 15.24 mm, diameter 9 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 2.54 mm, diameter 4 mm + + + + + + + + +>NAME +>VALUE + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 2.54 mm, diameter 5 mm + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 2.54 mm, diameter 6 mm + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 2.54 mm, diameter 7 mm + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 2.54 mm, diameter 4 mm, + + + + + + + + +>NAME +>VALUE + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 2 mm, diameter 4 mm + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 2.032 mm, diameter 5 mm + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 22.86 mm, diameter 10 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 22.86 mm, diameter 6 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 22.86 mm, diameter 9 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 3.5 mm, diameter 10 mm + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 25.4 mm, diameter 10 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 25.4 mm, diameter 9 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 3.5 mm, diameter 8 mm + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 30.48 mm, diameter 10 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 30.48 mm, diameter 12 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 30.48 mm, diameter 16 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 35.56 mm, diameter 12 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 30.48 mm, diameter 14 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 30.48 mm, diameter 16 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 30.48 mm, diameter 18 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 45.72 mm, diameter 16 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 45.72 mm, diameter 18 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 45.72 mm, diameter 21 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 45.72 mm, diameter 22 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 45.72 mm, diameter 25 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 5.08 mm, diameter 10.5 mm + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 5.08 mm, diameter 13 mm + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 5.05 mm, diameter 4 mm + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 5.08 mm, diameter 5 mm + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 5.08 mm, diameter 6 mm + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 5.08 mm, diameter 8.5 mm + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 50 mm, diameter 25 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 50 mm, diameter 30 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 55 mm, diameter 25 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 55 mm, diameter 30 mm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 5.08 mm, diameter 9 mm + + + + + + + + + +>NAME +>VALUE + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 7.62 mm, diameter 16 mm + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 7.62 mm, diameter 18 mm + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 10.16 mm, diameter 20 mm + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 10.16 mm, diameter 22.5 mm + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 10.16 mm, diameter 25 mm + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 10.16 mm, diameter 30 mm + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 10.16 mm, diameter 35 mm + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>Aluminum electrolytic capacitors</b> reflow soldering<p> +SMD (Chip) Standard 085 CS<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Aluminum electrolytic capacitors</b> wave soldering<p> +SMD (Chip) Standard 085 CS<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Aluminum electrolytic capacitors</b> reflow soldering<p> +SMD (Chip) Standard 085 CS<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Aluminum electrolytic capacitors</b> wave soldering<p> +SMD (Chip) Standard 085 CS<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Aluminum electrolytic capacitors</b> reflow soldering<p> +SMD (Chip) Long Life 139 CLL<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Aluminum electrolytic capacitors</b> wave soldering<p> +SMD (Chip) Long Life 139 CLL<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Aluminum electrolytic capacitors</b> reflow soldering<p> +SMD (Chip) Long Life 139 CLL<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Aluminum electrolytic capacitors</b> wave soldering<p> +SMD (Chip) Long Life 139 CLL<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Aluminum electrolytic capacitors SMD (Chip)</b><p> +Long life base plate, High temperature 140 CLH<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors SMD (Chip)</b><p> +Long life base plate, High temperature 140 CLH<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors SMD (Chip)</b><p> +Long life base plate, High temperature 140 CLH<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors SMD (Chip)</b><p> +Long life base plate, very low impedance 150 CLZ<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors SMD (Chip)</b><p> +Long life base plate, very low impedance 150 CLZ<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors SMD (Chip)</b><p> +Long life base plate, very low impedance 150 CLZ<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors</b><p> +SMD (Chip) Long Life Vertical 153 CLV<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors</b><p> +SMD (Chip) Long Life Vertical 153 CLV<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors</b><p> +SMD (Chip) Long Life Vertical 153 CLV<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors</b><p> +SMD (Chip) Long Life Vertical 153 CLV<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors</b><p> +SMD (Chip) Long Life Vertical 153 CLV<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors</b><p> +SMD (Chip) Long Life Vertical 153 CLV<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors</b><p> +SMD (Chip) Long Life Vertical 153 CLV<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors</b><p> +SMD (Chip) Long Life Vertical 153 CLV<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors</b><p> +High Temperature solid electrolytic SMD 175 TMP<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Aluminum electrolytic capacitors</b><p> +High Temperature solid electrolytic SMD 175 TMP<p> +http://www.bccomponents.com/ + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Chip Capacitor Type KEMET A / EIA 3216-18 reflow solder</b><p>KEMET S / EIA 3216-12 + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor Type KEMET A / EIA 3216-18 Wave solder</b><p> +KEMET S / EIA 3216-12 + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor Type KEMET B / EIA 3528-21 reflow solder</b><p>KEMET T / EIA 3528-12 + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor Type KEMET B / EIA 3528-21 Wave solder</b><p> +KEMET T / EIA 3528-12 + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor Type KEMET C / EIA 6032-28 reflow solder</b><p>KEMET U / EIA 6032-15 + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor Type KEMET C / EIA 6032-28 Wafe solder</b><p> +KEMET U / EIA 6032-15 + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor Type KEMET D / EIA 7343-21</b><p>KEMET V / EIA 7343-20, KEMET X / EIA 7343-43 reflow solder + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor Type KEMET D / EIA 7343-21</b><p> +KEMET V / EIA 7343-20, KEMET X / EIA 7343-43 Wafe solder + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor Type KEMET E / EIA 7260-38 reflow solder</b> + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor Type KEMET E / EIA 7260-38 Wafe solder</b> + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor Type KEMET R/EIA 2012-12 reflow solder</b> + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor Type KEMET R/EIA 2012-12 Wafe solder</b> + + + + + + +>NAME +>VALUE + + + + + +<b>Panasonic Aluminium Electrolytic Capacitor VS-Serie Package A</b> + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + +<b>Panasonic Aluminium Electrolytic Capacitor VS-Serie Package B</b> + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + +<b>Panasonic Aluminium Electrolytic Capacitor VS-Serie Package C</b> + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + +<b>Panasonic Aluminium Electrolytic Capacitor VS-Serie Package D</b> + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>Panasonic Aluminium Electrolytic Capacitor VS-Serie Package E</b> + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + +<b>Panasonic Aluminium Electrolytic Capacitor VS-Serie Package F</b> + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + +<b>Panasonic Aluminium Electrolytic Capacitor VS-Serie Package G</b> + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +diameter 5 mm, grid 2.54 mm + + + + + + + + + + + + + + + + + +>NAME +>VALUE +TT + + + + + + + +<b>ELECTROLYTIC CAPACITOR</b><p> +grid 2.54 mm, diameter 6 mm + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>Chip Capacitor </b> Polar tantalum capacitors with solid electrolyte<p> +Siemens Matsushita Components B 45 194, B 45 197, B 45 198<br> +Source: www.farnell.com/datasheets/247.pdf + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor</b> Polar tantalum capacitors with solid electrolyte<p> +Siemens Matsushita Components B 45 194<br> +Source: www.farnell.com/datasheets/247.pdf + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor</b> Polar tantalum capacitors with solid electrolyte<p> +Siemens Matsushita Components B 45 194<br> +Source: www.farnell.com/datasheets/247.pdf + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor </b> Polar tantalum capacitors with solid electrolyte<p> +Siemens Matsushita Components B 45 194, B 45 197, B 45 198<br> +Source: www.farnell.com/datasheets/247.pdf + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor </b> Polar tantalum capacitors with solid electrolyte<p> +Siemens Matsushita Components B 45 194, B 45 197, B 45 198<br> +Source: www.farnell.com/datasheets/247.pdf + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor </b> Polar tantalum capacitors with solid electrolyte<p> +Siemens Matsushita Components B 45 194, B 45 197, B 45 198<br> +Source: www.farnell.com/datasheets/247.pdf + + + + + + +>NAME +>VALUE + + + + + +<b>Chip Capacitor </b> Polar tantalum capacitors with solid electrolyte<p> +Siemens Matsushita Components B 45 194, B 45 197, B 45 198<br> +Source: www.farnell.com/datasheets/247.pdf + + + + + + +>NAME +>VALUE + + + + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + +>NAME +>VALUE + + + + + + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + +>NAME +>VALUE + + + + + + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + +>NAME +>VALUE + + + + + + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + +>NAME +>VALUE + + + + + + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + +>NAME +>VALUE + + + + + + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + +>NAME +>VALUE + + + + + + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + +>NAME +>VALUE + + + + + + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b><p> +Source: e_os_all.pdf + + + + +>NAME +>VALUE + + +<b>SANYO OSCON Capacitor</b> SMD type with conductive polymer electrolyte<p> +Source: e_os_all.pdf + + + + + + + + + +>NAME +>VALUE + + + + + + + +<b>SANYO OSCON Capacitor</b> SMD type with conductive polymer electrolyte<p> +Source: e_os_all.pdf + + + + + + + + + +>NAME +>VALUE + + + + + + + +<b>SANYO OSCON Capacitor</b> SMD type with conductive polymer electrolyte<p> +Source: e_os_all.pdf + + + + + + + + + +>NAME +>VALUE + + + + + + + +<b>SANYO OSCON Capacitor</b> SMD type with conductive polymer electrolyte<p> +Source: e_os_all.pdf + + + + + + + + + +>NAME +>VALUE + + + + + + + +<b>SANYO OSCON Capacitor</b> SMD type with conductive polymer electrolyte<p> +Source: e_os_all.pdf + + + + + + + + + +>NAME +>VALUE + + + + + + + +<b>SANYO OSCON Capacitor</b> SMD type with conductive polymer electrolyte<p> +Source: e_os_all.pdf + + + + + + + + + +>NAME +>VALUE + + + + + + + +<b>SANYO OSCON Capacitor</b> SMD type with conductive polymer electrolyte<p> +Source: e_os_all.pdf + + + + + + + + + +>NAME +>VALUE + + + + + + + +<b>ALUMINUM ELECTROLYTIC CAPACITORS</b> UD Series 10 x 10 mm<p> +Source: http://products.nichicon.co.jp/en/pdf/XJA043/e-ud.pdf + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + +<b>ALUMINUM ELECTROLYTIC CAPACITORS</b> UD Series 4 x 5.8 mm<p> +Source: http://products.nichicon.co.jp/en/pdf/XJA043/e-ud.pdf + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + +<b>ALUMINUM ELECTROLYTIC CAPACITORS</b> UD Series 5 x 5.8 mm<p> +Source: http://products.nichicon.co.jp/en/pdf/XJA043/e-ud.pdf + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + +<b>ALUMINUM ELECTROLYTIC CAPACITORS</b> UD Series 6.3 x 5.8 mm<p> +Source: http://products.nichicon.co.jp/en/pdf/XJA043/e-ud.pdf + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + +<b>ALUMINUM ELECTROLYTIC CAPACITORS</b> UD Series 6.3 x 7.7 mm<p> +Source: http://products.nichicon.co.jp/en/pdf/XJA043/e-ud.pdf + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + +<b>ALUMINUM ELECTROLYTIC CAPACITORS</b> UD Series 8 x 10 mm<p> +Source: http://products.nichicon.co.jp/en/pdf/XJA043/e-ud.pdf + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + +<B>POLARIZED CAPACITOR</B>, American symbol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>High Power Density, High Efficiency, Shielded Inductors</b><p> +Source: coiltronics_dr_series.pdf + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +>NAME +>VALUE + + + + + + + +<b>High Power Density, High Efficiency, Shielded Inductors</b><p> +Source: coiltronics_dr_series.pdf + + + + + + + + + + + + + + + + + + + + +<b>SMA</b> CASE 403D-02<p> +Source: http://www.onsemi.com/pub_link/Collateral/MBRA340T3-D.PDF + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + +<b>Surface Mount Schottky Power Rectifier</b><p> +Source: http://www.onsemi.com/pub_link/Collateral/MBRA340T3-D.PDF + + + + + + + + + + + + + + + + + + +<b>Murata Filters</b><p> +Distributor RS Components<p> +<author>Created by librarian@cadsoft.de</author> + + +Source: http://search.murata.co.jp/Ceramy/CatalogshowpageAction.do?sDirnm=A07X&sFilnm=81G07006&sType=2&sLang=en&sNHinnm=CSTCR6M00G53Z-R0&sCapt=Standard_Land_Pattern_Dimensions + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + +<b>Resonator</b><p> +Source: murata.co.jp + + + + + + + + + + + + + + + + + + + + + + + + +<b>Lumberg Connectors</b><p> +include con-mfs.lbr - 2001.03.22<br> +Jack connectors - 2005.11.23<p> +http://www.lumberg.de<p> +<author>Created by librarian@cadsoft.de</author> + + +<b>Jack connectors according to JISC 6560, 2.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 2,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/1501_03.pdf + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + +<b>Klinkensteckverbinder nach JISC 6560, 3,5 mm</b><p> +Jack connectors according to JISC 6560, 2.5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/1501_03.pdf + + + + + + + + + + + + + + + + + + + + + + + + +<h3>SparkFun Electronics' preferred foot prints</h3> +We've spent an enormous amount of time creating and checking these footprints and parts. If you enjoy using this library, please buy one of our products at www.sparkfun.com. +<br><br> +<b>Licensing:</b> CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>Name +>Value + + + + + + + + + + + + + + + + + + + + + + + + + + +>Name +>Value + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Blue Giga Audio Bluetooth Module + +Footprint is not confirmed yet. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eagle/Bluetunes.lbr b/eagle/Bluetunes.lbr new file mode 100644 index 0000000..9092b45 --- /dev/null +++ b/eagle/Bluetunes.lbr @@ -0,0 +1,495 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +UD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +BlueTunes ROM QFN + + + + + +REG + + + + + + + + + + + + +REG + + + + + + + + + + + + +REG + + + + + + + + + + + + + + + + + + + + + +FI212C245072-T + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eagle/avr-7.lbr b/eagle/avr-7.lbr new file mode 100644 index 0000000000000000000000000000000000000000..24b5be30d2335cb84d1e6fe401d7505f7398a549 GIT binary patch literal 253699 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 QW{UvfuX}<1yeYr`0U$Aq9smFU literal 0 HcmV?d00001 diff --git a/eagle/con-lumberg-mod.lbr b/eagle/con-lumberg-mod.lbr new file mode 100644 index 0000000..c7d1ac3 --- /dev/null +++ b/eagle/con-lumberg-mod.lbr @@ -0,0 +1,6648 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Lumberg Connectors</b><p> +include con-mfs.lbr - 2001.03.22<br> +Jack connectors - 2005.11.23<p> +http://www.lumberg.de<p> +<author>Created by librarian@cadsoft.de</author> + + +<b>CONNECTOR</b> + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Netzgeräte-Einbaukupplung</b> abgewinkelte Ausführung mit Öffner<p> +Source: http://www.lumberg.com/Produkte/PDFs/NEB21R.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +DIN45323 +>NAME +>VALUE + + +<b>Netzgeräte-Einbaukupplung</b> abgewinkelte Ausführung mit Öffner<p> +Source: http://www.lumberg.com/Produkte/PDFs/NEB_J25R.pdf<br> +MARUSHIN ELECTRIC MFG.CO. LTD - Draw No: MJ196P - NEB J 21 R.pdf + + + + + + + + + + + +>NAME +>VALUE + + +<b>MSF CONNECTOR</b> Buerklin Nr. 56 F 559 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +3 + + + +<b>MSF CONNECTOR</b> Buerklin Nr. 56 F 583 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> Buerklin Nr. 56 F 582 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +6 + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +3 + + + + + + + + + + + +<b>MSF CONNECTOR</b> Buerklin Nr. 56 F 561 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +6 + + + +<b>MSF CONNECTOR</b> Buerklin Nr. 56 F 562 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +10 + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +4 + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +5 + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +7 + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +8 + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +9 + + + +<b>MSF CONNECTOR</b> Buerklin Nr. 56 F 581 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +4 + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +5 + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +7 + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +8 + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE +1 +9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Jack connectors according to JISC 6560, 2.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 2,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/1501_03.pdf + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Jack connectors according to JISC 6560, 2.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 2,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/1501_05.pdfedit 1501_03 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Jack connectors according to JISC 6560, 2.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 2,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/1501_06.pdf + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 3,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/KLBR2.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Jack connectors according to JISC 6560, 2.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 2,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/KLBR1.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 3,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/1502_01.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkeneinbaukupplung nach JISC 6560, 3,5 mm, 3-polig/<br> +stereo, stehende Ausführung, mit Öffner, für Leiterplatten<br> +Source: http://www.lumberg.com/Produkte/PDFs/1503_11.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 3,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/1503_07.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 3,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/1503_08.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm, IP 57</b><p> +Klinkensteckverbinder nach JISC 6560, 3,5 mm, IP 57<br> +Source: http://www.lumberg.com/Produkte/PDFs/1503_04.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 3,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/KLBR4.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkeneinbaukupplung nach JISC 6560, 3,5 mm, 3-polig/<br> +stereo, abgewinkelte Ausführung, mit 2 Öffnern und Lötaugen,<br> +für Leiterplatten Rückseitenmontage<p> +Source: http://www.lumberg.com/Produkte/PDFs/1503_09.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkeneinbaukupplung nach JISC 6560, 3,5 mm, 3-polig/stereo,<br> +abgewinkelte Ausführung, Surface-Mount-Technik (SMT)<p> +Source: http://www.lumberg.com/Produkte/PDFs/1503_02.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 3,5 mm<br> +Source: http://www.lumberg.de/Produkte/PDFs/1503_03.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkeneinbaukupplung, 3,5 mm, 4-polig/stereo, abgewinkelte Ausführung<br> +Source: http://www.lumberg.de/Produkte/PDFs/1503_10.pdf<br> ++ '1503 10.pdf' + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + +<b>Jack connectors according to JISC 6560, 6.35 mm</b><p> +Klinkeneinbaukupplung nach JISC 6560, 6,35 mm, 3-polig/stereo,<br> +abgewinkelte Ausführung, mit 2 Umschaltern, Leiterplatten Rückseitenmontage<br> +Source: http://www.lumberg.de/Produkte/PDFs/KLBRSS3.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>RCA connectors according to JEITA RC-5231</b> Cinch<p> +RCA-Einbaukupplung nach JEITA RC-5231, stehende Ausführung<br> +Source: http://www.lumberg.de/Produkte/PDFs/BTOR1.pdf + + + + + + + + + + + + + + + +>NAME +>VALUE + + +<b>RCA connectors according to JEITA RC-5231</b> Cinch<p> +RCA-Einbaukupplung nach JEITA RC-5231, abgewinkelte Ausführung<br> +Source: http://www.lumberg.de/Produkte/PDFs/WBTOR1.pdf + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + +<b>RCA connectors according to JEITA RC-5231</b><p> +RCA-Steckverbinder nach JEITA RC-5231<p> +Source: RCA- Stecker 2poolig.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + +>VALUE +>NAME + + + + + + + + + + + + + + + + +>VALUE +>NAME + + + + + + + + + + + + + + + + + + + + +>VALUE +>NAME + + + + + + + + + + + + + + + + + + + + + + + + +>VALUE +>NAME + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>VALUE +>NAME + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>VALUE +>NAME + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>VALUE +>NAME + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>VALUE +>NAME + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>VALUE +>NAME + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>VALUE +>NAME + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>VALUE +>NAME + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + +>NAME +>VALUE + + + + + + + +>NAME +>VALUE + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Netzgeräte-Einbaukupplung</b> abgewinkelte Ausführung mit Öffner</b><p> +Source: http://www.lumberg.com/Produkte/PDFs/NEB21R.pdf + + + + + + + + + + + + + + + + + + + + + + +<b> Klinkeneinbaukupplung</b> + + + + + + + + + + + + + + + + + + + + + + +<b>Netzgeräte-Einbaukupplung</b> nach DIN 45323, abgewinkelte Ausführung, mit Flansch und Öffner<p> +Source: http://www.lumberg.com/Produkte/PDFs/NEB1R.pdf + + + + + + + + + + + + + + + + + + + + + + + +<b>Netzgeräte-Einbaukupplung</b> abgewinkelte Ausführung mit Öffner<p> +Source: http://www.lumberg.com/Produkte/PDFs/NEB_J25R.pdf<br> +MARUSHIN ELECTRIC MFG.CO. LTD - Draw No: MJ196P -NEB J 25 R.pdf + + + + + + + + + + + + + + + + + + + + + + +<b>Netzgeräte-Einbaukupplung</b> abgewinkelte Ausführung mit Öffner<p> +Source: http://www.lumberg.com/Produkte/PDFs/NEB_J21R.pdf<br> +MARUSHIN ELECTRIC MFG.CO. LTD - Draw No: MJ196P - NEB J 21 R.pdf + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>MSF CONNECTOR</b> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Klinkensteckverbinder nach JISC 6560, 3,5 mm</b><p> +Jack connectors according to JISC 6560, 2.5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/1501_03.pdf + + + + + + + + + + + + + + + + + + + + + + +<b>Jack connectors according to JISC 6560, 2.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 2,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/1501_05.pdfedit 1501_03<br> +http://www.lumberg.com/Produkte/PDFs/1501_06.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Jack connectors according to JISC 6560, 2.5mm / 3.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 2.5mm / 3,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/KLBR2.pdf<br> + www.lumberg.com/Produkte/PDFs/KLBR1.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 3,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/1502_01.pdf + + + + + + + + + + + + + + + + + + + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkeneinbaukupplung nach JISC 6560, 3,5 mm, 3-polig/<br> +stereo, stehende Ausführung, mit Öffner, für Leiterplatten<br> +Source: http://www.lumberg.com/Produkte/PDFs/1503_11.pdf + + + + + + + + + + + + + + + + + + + + + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkensteckverbinder nach JISC 6560, 3,5 mm<br> +Source: http://www.lumberg.com/Produkte/PDFs/1503_08.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm, IP 57</b><p> +Klinkensteckverbinder nach JISC 6560, 3,5 mm, IP 57<br> +Source: http://www.lumberg.com/Produkte/PDFs/1503_04.pdf + + + + + + + + + + + + + + + + + + + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkeneinbaukupplung nach JISC 6560, 3,5 mm, 3-polig/<br> +stereo, abgewinkelte Ausführung, mit Öffner, für Leiterplatten<p> +Source: http://www.lumberg.com/Produkte/PDFs/KLBR4.pdf + + + + + + + + + + + + + + + + + + + + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkeneinbaukupplung nach JISC 6560, 3,5 mm, 3-polig/<br> +stereo, abgewinkelte Ausführung, mit 2 Öffnern und Lötaugen,<br> +für Leiterplatten Rückseitenmontage<p> +Source: http://www.lumberg.com/Produkte/PDFs/1503_09.pdf + + + + + + + + + + + + + + + + + + + + + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkeneinbaukupplung nach JISC 6560, 3,5 mm, 3-polig/stereo,<br> +abgewinkelte Ausführung, Surface-Mount-Technik (SMT)<p> +Source: http://www.lumberg.com/Produkte/PDFs/1503_02.pdf + + + + + + + + + + + + + + + + + + + + + + + +<b>Jack connectors according to JISC 6560, 3.5 mm</b><p> +Klinkeneinbaukupplung, 3,5 mm, 4-polig/stereo, abgewinkelte Ausführung<br> +Source: http://www.lumberg.de/Produkte/PDFs/1503_10.pdf + + + + + + + + + + + + + + + + + + + + + + + + +<b>Jack connectors according to JISC 6560, 6.35 mm</b><p> +Klinkeneinbaukupplung nach JISC 6560, 6,35 mm, 3-polig/stereo,<br> +abgewinkelte Ausführung, mit 2 Umschaltern, Leiterplatten Rückseitenmontage<br> +Source: http://www.lumberg.de/Produkte/PDFs/KLBRSS3.pdf + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>RCA connectors according to JEITA RC-5231</b> Cinch<p> +RCA-Einbaukupplung nach JEITA RC-5231, stehende Ausführung<br> +Source: http://www.lumberg.de/Produkte/PDFs/BTOR1.pdf + + + + + + + + + + + + + + + + + + + + + + + + +<b>RCA connectors according to JEITA RC-5231</b> Cinch<p> +RCA-Einbaukupplung nach JEITA RC-5231, abgewinkelte Ausführung<br> +Source: http://www.lumberg.de/Produkte/PDFs/WBTOR1.pdf + + + + + + + + + + + + + + + + + + + + + +<b>RCA connectors according to JEITA RC-5231</b><p> +RCA-Steckverbinder nach JEITA RC-5231<p> +Source: RCA- Stecker 2poolig.pdf + + + + + + + + + + + + + + + + + + + diff --git a/eagle/cstce-resonator.lbr b/eagle/cstce-resonator.lbr new file mode 100644 index 0000000..27d9807 --- /dev/null +++ b/eagle/cstce-resonator.lbr @@ -0,0 +1,267 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<b>Murata Filters</b><p> +Distributor RS Components<p> +<author>Created by librarian@cadsoft.de</author> + + +<b>FILTER</b> + + + + + + + +>NAME +>VALUE + + +Source: http://search.murata.co.jp/Ceramy/CatalogshowpageAction.do?sDirnm=A07X&sFilnm=81G07006&sType=2&sLang=en&sNHinnm=CSTCR6M00G53Z-R0&sCapt=Standard_Land_Pattern_Dimensions + + + + + + + +>NAME +>VALUE + + + + + + + + +<b>NFM3DC/NFM3DP</b> Reflow Soldering<p> +Source: http://search.murata.co.jp/Ceramy/image/img/A03X/MT_NFE.pdf + + + + + + + + +>NAME +>VALUE + + +<b>NFM21C/NFR21G/NFM21P/NFL21S</b><p> +Source: http://search.murata.co.jp/Ceramy/image/img/PDF/ENG/L0111S0109NFM21C.pdf<br> +http://search.murata.co.jp/Ceramy/image/img/A03X/MT_NFE.pdf + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>NAME +>VALUE + + + + + + + + + +>NAME +>VALUE + + + + + + + + +<b>Resonator</b><p> +Source: murata.co.jp + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eagle/rcl-2.lbr b/eagle/rcl-2.lbr new file mode 100644 index 0000000000000000000000000000000000000000..958af740f959cd28d37899eec876c20e76f8ac5a GIT binary patch literal 316717 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

G^mp&SJ-bdLQk-p2tQx}>AaYYFA`3gqjq-+8Fc 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 literal 0 HcmV?d00001 diff --git a/eagle/supply.lbr b/eagle/supply.lbr new file mode 100644 index 0000000000000000000000000000000000000000..0d5540f3ebd945ff6a07b3b080707c0acb496d2b GIT binary patch literal 24652 zcmeHP32ay?8HgqByO9eX_6l&X_DGbyk?=nt+ys=z2UK^yVF^|ztw3JpLfm9Gkh*f|Pt5_1qaPPbS&HKwd`%Ut# zwo*oM=Fge;&%N)y`|jKB{559=*}JP4t6o!G#~x;-*IM@4o@YM&_>sq6Sw6%5*ZuTU zXP$rT6&7J@OCPFMvj29U`DXR4k9}_yW9t|zM&Ry`oyFJlH`DujZf;v+jVM2n&FAK9 zGYve^tFMmK3%uW&F|!3Lmj(W7u8q_R+#by&QYL(AVC$~EM&e0{uU@}F^4KGJ>x7jp zVEGN}C7zV{>W$Y)9(y=3W1^-|{<@74PfC3Crt2kc#}k=3yaCEzze(ariAOhYsgnA~ zY_cen-?F);geN5)-D*^qaJw&WCdkg~jIGN`cv9lgZH-kWd)l{JS*tM3^=aHzQ^J!H zk8a=L;y(iFqj5o>9ot>}5|8e@LDtJ2Hw(5?{)U|rPf9$xYxl~M|Jb*i<}9=@^6%cY zvgAKWiAVR`SSQPm0e{{~*--w*J$16Y#G_43btQj$(1kZQOMUwDRwhI37;R~h_|aU3 zH!tWD-Mcpe9f@8;P~6I%Ks!YD?UUt)%tT=>54Ql`+A8t>Txt$H6zdgjYm@kxIc4U} zY{~?@yq^F#Uid+w3_YuL0!|Ejif8XjQ4b z#;{kn^LnwWs;W}^a=e4^>gsB5`A))@EvxpH?;^aWX1TZge!^>OmwU?}Abk1qsJHw< z!dI+_ddnXoysoa+TfVIo?Z8&9to4>}YvcH;Rm*(kp~6u9s;idy%0q<#U%k4FG{?KBERG{p7cWYDB!6PCcMSNiIm6f%F#mO6MQnw_-0W=TG-K-l-weQU!0;vT15gUf z9U1OtY`y^2=T{7U&iC523xF0E7-h8#T!g;_PaHqZKL$Ll{8Eo+xq{~@;EDJ30i_;K zgi&e6y!w0@c$&IUAw8a`LZ9yfPfGJ&VW z08hLLyPBRps}($Fk%xC_J)U|6&li!WuWw(wrao)fksTB{y#4fB$kPvzNRwx+g6B2l ziN&;e)&+QaFbvNB33&LGrasrO_*l7mMF+v3JK`O>^}05o54ax0)%D2Jsnbti{6w)B zW$P6@&A<~M8@N?hpA8D09@J-l9OeUh{a|_LvzvId?YzU!!{WTZzZH0z z+I9Ln7LT%>ex65&XAF4a0|VOq;syoJ3FH|a)#lmd=W*)w4y;$3z8~%m@J#T2@j>9> zSDNj$C(yshKF?siCStw1?S5l`C&u;pD)8_tO?{dIJcFF)2f)LxG

  • JXEjW08dvu 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 F{{!Dunv4Jd literal 0 HcmV?d00001 diff --git a/eagle/supply0.lbr b/eagle/supply0.lbr new file mode 100644 index 0000000000000000000000000000000000000000..87468ecb82a5fca405a2fbd76249bd62d9559f39 GIT binary patch literal 20526 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