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


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


#-------------------

#Programmieradapter

#hier kannst Du Deinen Programmieradapter angeben, wenn Du einen 
#anderen nimmst, als den ganz einfachen parallelen

#der parallele Programmieradapter der Mikrocontrollerspielwiese fuer Linux:
PROGRAMMER = -c dapa

#der USB-Programmieradapter der Mikrocontrollerspielwiese:
#PROGRAMMER = -c usbasp

#mein Mac-Programmieradapter:
#PROGRAMMER = -c stk500v2 -P /dev/tty.usbmodem431





#-------------------
# optimize for size:
CFLAGS=-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues

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

#-------------------
help: 
	clear
	@echo
	@echo "Moegliche Befehle:"
	@echo "		make - compiliert Dein Programm und erzeugt die .hex-Datei"
	@echo "		make all - wie make"
	@echo "		make load - compiliert Dein Programm und schiebt es in den AVR"
	@echo "		make clean - loescht die beim Compilieren erzeugten Dateien"
	@echo
	@echo "		make help - zeigt diesen Hilfetext"
	@echo
	@echo "		make rdfuses - gibt Dir Informationen ueber die gesetzten Fusebits und mehr"
	@echo "		make wrfuse1mhz - setzt Fusebit fuer 1 MHz intern"
	@echo "		make wrfuse4mhz - setzt Fusebit fuer 4 MHz intern"
	@echo "		make wrfuse8mhz - setzt Fusebit fuer 8 MHz intern"
	@echo "		make wrfusecrystal - setzt Fusebit externen Quarz (=Crystal)"
	@echo
	@echo "Achtung: ohne angeschlossenen Quarz (=crystal) hast Du keine Chance"
	@echo "         ein wrfusecrystal rueckgaengig zu machen!"
	@echo
	@echo "Warning: you will not be able to undo wrfusecrystal unless you connect an"
	@echo "         external crystal! uC is dead after wrfusecrystal if you do not"
	@echo "         have an external crystal."
	@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 m8 $(PROGRAMMER) -e -U flash:w:"test1.hex"
	

#-------------------
# fuse byte settings ATmega8:
#   
#  Fuse Low Byte      = 0xe1 (1MHz internal), 0xe3 (4MHz internal), 0xe4 (8MHz internal)
#  Fuse High Byte     = 0xd9 
#  Factory default is 0xe1 / 0xd9
#  Check this with make rdfuses
rdfuses:
	avrdude -p m8 $(PROGRAMMER) -v -q	
# 
	
	
# use internal RC oscillator 1 Mhz
wrfuse1mhz:
	
		avrdude -p m8 $(PROGRAMMER) -u -v -U lfuse:w:0xe1:m
		avrdude -p m8 $(PROGRAMMER) -u -v -U hfuse:w:0xd9:m
		

# use internal RC oscillator 4 Mhz
wrfuse4mhz:
		
		avrdude -p m8 $(PROGRAMMER) -u -v -U lfuse:w:0xe3:m
		avrdude -p m8 $(PROGRAMMER) -u -v -U hfuse:w:0xd9:m
		

# use internal RC oscillator 4 Mhz
wrfuse8mhz:
		
		avrdude -p m8 $(PROGRAMMER) -u -v -U lfuse:w:0xe4:m
		avrdude -p m8 $(PROGRAMMER) -u -v -U hfuse:w:0xd9:m
		
	
# use external 3-8 Mhz crystal
wrfusecrystal:
	clear
	@echo "Warnung: Das Setzen des Quarz-Fusebits kann nur mit Quarz rueckgaengig gemacht werden!"
	@echo "         Du hast 20 Sekunden mit crtl-c abzubrechen."
	@echo
	@echo "Warning: The external crystal setting can not be changed back without a working crystal"
	@echo "         You have 20 seconds to abort this with crtl-c"
	@sleep 20
	
	
		avrdude -p m8 $(PROGRAMMER) -u -v -U lfuse:w:0xee:m
		avrdude -p m8 $(PROGRAMMER) -u -v -U hfuse:w:0xd9:m

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