From f3db109cfb82857add150cecd2de3c6f73ae4c2f Mon Sep 17 00:00:00 2001 From: Jan Michel Date: Fri, 23 May 2014 15:20:00 +0200 Subject: [PATCH] power switch firmware --- .kateproject | 4 + Power/firmware/Makefile | 223 ++++++++++++++++++++++++++++++++++++++++ Power/firmware/main.c | 0 bom.xls | Bin 0 -> 23040 bytes 4 files changed, 227 insertions(+) create mode 100644 .kateproject create mode 100644 Power/firmware/Makefile create mode 100644 Power/firmware/main.c create mode 100644 bom.xls diff --git a/.kateproject b/.kateproject new file mode 100644 index 0000000..fbcfabe --- /dev/null +++ b/.kateproject @@ -0,0 +1,4 @@ +{ + "name": "Electronics" +, "files": [ { "git": 1 } ] +} diff --git a/Power/firmware/Makefile b/Power/firmware/Makefile new file mode 100644 index 0000000..34364fc --- /dev/null +++ b/Power/firmware/Makefile @@ -0,0 +1,223 @@ +# Hey Emacs, this is a -*- makefile -*- + +# AVR-GCC Makefile template, derived from the WinAVR template (which +# is public domain), believed to be neutral to any flavor of "make" +# (GNU make, BSD make, SysV make) + + +MCU = attiny441 +FORMAT = ihex +TARGET = main +SRC = $(TARGET).c +ASRC = +OPT = s + +# Name of this Makefile (used for "make depend"). +MAKEFILE = Makefile + +# Debugging format. +# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. +# AVR (extended) COFF requires stabs, plus an avr-objcopy run. +DEBUG = stabs + +# 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 +CDEFS = + +# Place -I options here +CINCS = + + +CDEBUG = -g$(DEBUG) +CWARN = -Wall -Wstrict-prototypes +CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +#CEXTRA = -Wa,-adhlns=$(<:.c=.lst) +CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA) + + +#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#Additional libraries. + +# 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 + +PRINTF_LIB = + +# 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 + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref +LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) + + +# Programming support using avrdude. Settings and variables. + +AVRDUDE_PROGRAMMER = usbtiny +AVRDUDE_PORT = usb + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# 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_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER) + + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +MV = mv -f + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + +# Default target. +all: build + +build: elf hex eep + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof + + +extcoff: $(TARGET).elf + $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof + + +.SUFFIXES: .elf .hex .eep .lss .sym + +.elf.hex: + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +.elf.eep: + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +.elf.lss: + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +.elf.sym: + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +$(TARGET).elf: $(OBJ) + $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +.c.o: + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +.c.s: + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +.S.o: + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: + $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \ + $(TARGET).map $(TARGET).sym $(TARGET).lss \ + $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d) + +depend: + if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \ + then \ + sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \ + $(MAKEFILE).$$$$ && \ + $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \ + fi + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \ + >> $(MAKEFILE); \ + $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE) + +.PHONY: all build elf hex eep lss sym program coff extcoff clean depend diff --git a/Power/firmware/main.c b/Power/firmware/main.c new file mode 100644 index 0000000..e69de29 diff --git a/bom.xls b/bom.xls new file mode 100644 index 0000000000000000000000000000000000000000..0b79c844d19538c004068429918e3b4a7ade2081 GIT binary patch literal 23040 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