1 # makefile for digitial dc power supply, written by guido socher
4 # === Edit this and enter the correct device/com-port:
5 # linux (plug in the avrusb500 and type dmesg to see which device it is):
6 LOADCMD=avrdude -P /dev/ttyUSB0
8 # mac (plug in the programer and use ls /dev/tty.usbserial* to get the name):
9 #LOADCMD=avrdude -P /dev/tty.usbserial-A9006MOb
11 # windows (check which com-port you get when you plugin the avrusb500):
12 #LOADCMD=avrdude -P COM4
14 # All operating systems: if you have set the default_serial paramter
15 # in your avrdude.conf file correctly then you can just use this
16 # and you don't need the above -P option:
20 LOADARG=-p $(DUDECPUTYPE) -c stk500v2 -e -U flash:w:
26 CFLAGS=-g -mmcu=$(MCU) -Wall -W -Os -mcall-prologues
27 # #-------------------
28 .PHONY: test_lcd test_dac all main ddcp-script
30 all: main.hex test_lcd.hex test_dac.hex
32 ddcp-script: ddcp-script-setval ddcp-script-getval ddcp-script-ttyinit
36 test_lcd: test_lcd.hex
39 test_dac: test_dac.hex
42 ddcp-script-setval: ddcp-script-setval.c
43 gcc -Wall -o ddcp-script-setval ddcp-script-setval.c
44 ddcp-script-getval: ddcp-script-getval.c
45 gcc -Wall -o ddcp-script-getval ddcp-script-getval.c
46 ddcp-script-ttyinit: ddcp-script-ttyinit.c
47 gcc -Wall -o ddcp-script-ttyinit ddcp-script-ttyinit.c
52 @echo "Usage: make help"
53 @echo " Print this help"
55 @echo "Usage: make all|load|rdfuses|fuses"
56 @echo " program using the avrdude programmer"
58 @echo "Usage: make clean"
59 @echo " delete all generated files"
60 @echo "Test programs:"
61 @echo "Usage: make test_lcd|load_test_lcd|test_dac|load_test_dac"
62 @echo " compile and load test programs"
63 @echo "Usage: make ddcp-script-ttyinit"
64 @echo " compile unix program to set serial line speed such that one can use scripts to change settings"
67 $(OBJCOPY) -R .eeprom -O ihex main.elf main.hex
70 @echo "Expl.: data=initialized data, bss=uninitialized data, text=code"
72 main.elf: main.o dac.o lcd.o analog.o kbd.o uart.o
73 $(CC) $(CFLAGS) -o main.elf -Wl,-Map,main.map main.o dac.o lcd.o analog.o kbd.o uart.o
74 main.o: main.c dac.h kbd.h lcd.h lcd_hw.h analog.h hardware_settings.h uart.h
75 $(CC) $(CFLAGS) -Os -c main.c
77 test_lcd.hex: test_lcd.elf
78 $(OBJCOPY) -R .eeprom -O ihex test_lcd.elf test_lcd.hex
79 test_lcd.elf: test_lcd.o lcd.o kbd.o
80 $(CC) $(CFLAGS) -o test_lcd.elf -Wl,-Map,test_lcd.map test_lcd.o lcd.o kbd.o
81 test_lcd.o: test_lcd.c lcd.h lcd_hw.h kbd.h
82 $(CC) $(CFLAGS) -Os -c test_lcd.c
84 test_dac.hex: test_dac.elf
85 $(OBJCOPY) -R .eeprom -O ihex test_dac.elf test_dac.hex
86 test_dac.elf: test_dac.o lcd.o kbd.o dac.o
87 $(CC) $(CFLAGS) -o test_dac.elf -Wl,-Map,test_dac.map test_dac.o lcd.o kbd.o dac.o
88 test_dac.o: test_dac.c lcd.h lcd_hw.h kbd.h dac.h
89 $(CC) $(CFLAGS) -Os -c test_dac.c
91 lcd.o : lcd.c lcd.h lcd_hw.h
92 $(CC) $(CFLAGS) -Os -c lcd.c
94 analog.o : analog.c analog.h hardware_settings.h
95 $(CC) $(CFLAGS) -Os -c analog.c
98 $(CC) $(CFLAGS) -Os -c dac.c
101 $(CC) $(CFLAGS) -Os -c kbd.c
103 uart.o : uart.c uart.h
104 $(CC) $(CFLAGS) -Os -c uart.c
107 $(LOADCMD) $(LOADARG)main.hex
109 load_test_lcd: test_lcd.hex
110 $(LOADCMD) $(LOADARG)test_lcd.hex
112 load_test_dac: test_dac.hex
113 $(LOADCMD) $(LOADARG)test_dac.hex
116 # fuse byte settings:
118 # Fuse Low Byte = 0xe1 (1MHz internal), 0xe4 (8MHz internal)
119 # Fuse Low Byte with BOD = 0xa1 (1MHz internal), 0xa4 (8MHz internal)
120 # Fuse High Byte = 0xd9
121 # Factory default is 0xe1 for low byte and 0xd9 for high byte
122 # Check this with make rdfuses
124 $(LOADCMD) -p $(DUDECPUTYPE) -c stk500v2 -v -q
125 # use internal RC oscillator 8 Mhz (lf=0xe4 hf=0xd9)
127 $(LOADCMD) -p $(DUDECPUTYPE) -c stk500v2 -u -v -U lfuse:w:0xa4:m
128 $(LOADCMD) -p $(DUDECPUTYPE) -c stk500v2 -u -v -U hfuse:w:0xd9:m
130 $(LOADCMD) -p $(DUDECPUTYPE) -c stk500v2 -u -v -U lfuse:w:0xa4:m
131 $(LOADCMD) -p $(DUDECPUTYPE) -c stk500v2 -u -v -U hfuse:w:0xd9:m
134 rm -f *.o *.map *.elf test*.hex main.hex ddcp-script-ttyinit ddcp-script-getval ddcp-script-setval