#-------------------------------------------------------------------------------------------------------
# makefile
#
# written by Steffen from mikrocontrollerspielwiese.de 
#
# inspired by Guido Socher's makefile 
# http://www.linuxfocus.org/Deutsch/November2004/article352.shtml
#
# license: GPL (http://www.gnu.org/licenses/gpl.txt)
#-------------------------------------------------------------------------------------------------------

MCU=attiny13
CC=avr-gcc
OBJCOPY=avr-objcopy

#-------------------
# Programmieradapter
PROGRAMMER = -c dapa
#PROGRAMMER = -c usbasp


#-------------------
# auf Kleinheit optimieren:
CFLAGS=-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues

#-------------------
all: test1.hex

#-------------------
help: 
	clear
	@echo
	@echo "Moegliche Befehle:"
	@echo "		make all - compiliert Dein Programm und erzeugt die .hex-Datei"
	@echo "		make load - compiliert Dein Programm und schiebt es in den AVR"
	@echo "		make clean - loescht die beim Compilieren erzeugten Dateien"
	@echo "		make rdfuses - gibt Dir Informationen ueber die gesetzten Fusebits und mehr"
	@echo "		make wrfuse4.8mhz - setzt Fusebit fuer 4.8 MHz intern"
	@echo "		make wrfuse9.6mhz - setzt Fusebit fuer 9.6 MHz intern"
	@echo "		make wrfuse128khz - setzt Fusebit fuer 128 kHz intern"
	@echo "		make wrfusecrystal - setzt Fusebit fuer externen Quarz / Crystal (Achtung!)"
	@echo "		make wrfusenoreset - setzt Fusebit fuer PB5 (Achtung!)"
	@echo "		make help - zeigt diesen Hilfetext"
	@echo
	@echo "Achtung: ohne Quarz hast Du keine Chance wrfusecrystal rueckgaengig zu machen!"
	@echo
	@echo "Achtung: wrfusenoreset schaltet PB5 frei und deaktiviert RESET !!!"
	@echo
	
#-------------------
test1.hex : test1.out 
	$(OBJCOPY) -R .eeprom -O ihex test1.out test1.hex 
test1.out : test1.o 
	$(CC) $(CFLAGS) -o test1.out -Wl,-Map,test1.map test1.o 
test1.o : test1.c 
	$(CC) $(CFLAGS) -Os -c test1.c
	
#------------------
load: test1.hex
	avrdude -p t13 $(PROGRAMMER) -e -U flash:w:"test1.hex"
	

#-------------------
# fuse byte settings attiny13:
#   
#  Fuse Low Byte       = 0x69 (4,8MHz internal), 0x6a (9.6MHz internal)
#  Fuse High Byte      = 0xff (RESET enabled),  0xfe (PB5 enabled, RESET disabled)
#  Factory default is 0x6a / 0xff
#  Check this with make rdfuses

rdfuses:
	avrdude -p t13 $(PROGRAMMER) -v -q	 
	
	
# use internal RC oscillator 4.8 MHz
wrfuse4.8mhz:
	
		avrdude -p t13 $(PROGRAMMER) -u -v -U lfuse:w:0x69:m
		avrdude -p t13 $(PROGRAMMER) -u -v -U hfuse:w:0xff:m
		

# use internal RC oscillator 9.6 MHz
wrfuse9.6mhz:
		
		avrdude -p t13 $(PROGRAMMER) -u -v -U lfuse:w:0x6a:m
		avrdude -p t13 $(PROGRAMMER) -u -v -U hfuse:w:0xff:m
		
		
	
# use external crystal
wrfusecrystal:
	clear
	@echo "Warnung: Das Setzen des Quarz-Fusebits kann nur mit Quarz rueckgaengig gemacht werden!"
	@echo "         Du hast 15 Sekunden, um mit crtl-c abzubrechen."
	@echo
	@echo "Warning: The external crystal setting can not be changed back without a working crystal"
	@echo "         You have 15 seconds to abort this with crtl-c"
	@sleep 15
	
		avrdude -p t13 $(PROGRAMMER) -u -v -U lfuse:w:0x68:m
		avrdude -p t13 $(PROGRAMMER) -u -v -U hfuse:w:0xff:m

	
	
# fuse byte setting for using PB5 (disables RESET) 
wrfusenoreset:
	clear
	@echo "Warnung:"
	@echo	
	@echo "Das Setzen des Reset-Fusebits kann nicht rueckgaengig gemacht werden!"
	@echo "Du hast 15 Sekunden, um mit crtl-c abzubrechen."
	@echo

	@sleep 15
			
		avrdude -p t13 $(PROGRAMMER) -u -v -U hfuse:w:0xfe:m

	
#-------------------
clean:
	rm -f *.o *.map *.out *.hex
	
#-------------------
