Software Toolchain for Windows
RealTerm (viewing UART)
Ateml Studio
Arduino Core Library
You may also need drivers:
UART
Software Toolchain for (Debian based) Linux
Following tools are usually present in most Linux systems out of the box.
If you receive permission denied kind of errors, you may need to issue the following.
$ sudo apt-get update $ sudo apt-get install flex byacc bison gcc build-essentialThese tools are necessary for AVR-based micro-controller programming.
$ sudo apt-get install gcc-avr gdb-avr binutils-avr avr-libc avrdude $ sudo apt-get install arduino-core arduinoRealterm is not available for Linux systems. Cutecom is very similar to Realterm.
$ sudo apt-get install cutecomUsually FTDI drivers are installed in the Linux kernel by default. Otherwise, try the following.
$ sudo apt-get install libusb libusb-devTry the following test program to see if the software toolchain is properly setup in you Linux system.
#includeNow, issue the following commands to compile and upload the code in the microcontroller.#include int main() { DDRB |= _BV(PB7); while(1) { PORTB ^= _BV(PB7); /* blink 4 times a second */ _delay_ms(250); } }
$ avr-gcc -DF_CPU=16000000 -Os -g -mmcu=atmega1280 -Wall blinking.c -o blinking.o $ avr-objcopy -j .text -j .data ihex blinking.o blinking.hex $ avrdude -p atmega1280 -c arduino -P /dev/ttyUSB0 -b 57600 -U flash:w:blinking.hex:iIt is a good idea to automate the process using a makefile. Here is the makefile that can be used to compile and upload the code in the microcontroller.
PRG = blinking
OBJ = blinking.o
PROGRAMMER = arduino
PORT = /dev/ttyUSB0
MCU_TARGET = atmega1280
AVRDUDE_TARGET = atmega1280
OPTIMIZE = -Os
DEFS =
LIBS =
BAUDRATE = 57600
HZ = 16000000
# You should not have to change anything below here.
CC = avr-gcc
# Override is only needed by avr-lib build system.
override CFLAGS = -g -DF_CPU=$(HZ) -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS)
override LDFLAGS = -Wl,-Map,$(PRG).map
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
all: $(PRG).elf lst text #eeprom
$(PRG).elf: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
clean:
rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak *.hex *.bin *.srec
rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)
lst: $(PRG).lst
%.lst: %.elf
$(OBJDUMP) -h -S $< > $@
# Rules for building the .text rom images
text: hex bin srec
hex: $(PRG).hex
bin: $(PRG).bin
srec: $(PRG).srec
%.hex: %.elf
$(OBJCOPY) -j .text -j .data -O ihex $< $@
%.srec: %.elf
$(OBJCOPY) -j .text -j .data -O srec $< $@
%.bin: %.elf
$(OBJCOPY) -j .text -j .data -O binary $< $@
# Rules for building the .eeprom rom images
eeprom: ehex ebin esrec
ehex: $(PRG)_eeprom.hex
#ebin: $(PRG)_eeprom.bin
esrec: $(PRG)_eeprom.srec
%_eeprom.hex: %.elf
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@
#%_eeprom.srec: %.elf
# $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@
%_eeprom.bin: %.elf
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@
# command to program chip (invoked by running "make install")
install: $(PRG).hex
avrdude -p $(AVRDUDE_TARGET) -c $(PROGRAMMER) -P $(PORT) -b $(BAUDRATE) -v \
-U flash:w:$(PRG).hex
fuse:
avrdude -p $(AVRDUDE_TARGET) -c $(PROGRAMMER) -P $(PORT) -v \
-U lfuse:w:0xc6:m -U hfuse:w:0xd9:m
ddd: gdbinit
ddd --debugger "avr-gdb -x $(GDBINITFILE)"
gdbserver: gdbinit
simulavr --device $(MCU_TARGET) --gdbserver
gdbinit: $(GDBINITFILE)
$(GDBINITFILE): $(PRG).hex
@echo "file $(PRG).elf" > $(GDBINITFILE)
@echo "target remote localhost:1212" >> $(GDBINITFILE)
@echo "load" >> $(GDBINITFILE)
@echo "break main" >> $(GDBINITFILE)
@echo
@echo "Use 'avr-gdb -x $(GDBINITFILE)'"
Now issue the following command to compile and upload the command using this makefile.
$ make && make installYou can download our complete makefile (adapted from here).
If you receive permission denied kind of errors, you may need to issue the following.
$ sudo chmod 666 /dev/ttyUSB0