After a while you might want to dig deeper and control all those hardware goodies in the Atmega328 chip yourself without the help of the Arduino and the bootloader. Oh well, you might just have run out of memory in your projects and want to get rid of the bootloader.
Good thing there is a way to program the AVR chip without the bootloader then. However this takes a bit more effort and a different way of talking to the chip via USB. Here's how I do it in Arch Linux - but it may apply to Debian based Linux distros as well.
The following assumes knowledge on how to use the terminal as most commands is executed there.
The programmer
First off you need to get a programmer to put the software in your chip. There are a lot of different devices out there, but I decided to get the USBtinyISP from Lady Ada.Picture courtesy of www.ladyada.net |
To make this programmer work without superuser privileges you need to make file with the following contents only:
SUBSYSTEM=="usb",ATTRS{idVendor}=="1781",ATTRS{idProduct}=="0c9f",GROUP="users",MODE="0666"In my case I've named it 'arduino.rules'. You can name it what you want, but it has to end on .rules . This file is then put in the /etc/udev/rules.d/ folder. You will need to be root for this operation.
This file is used by the system to decide what to do with a device that matches those attributes. In this case it grants the rights of '0666' to the users in the group 'users'. So make sure your own user account is a member of that user group - or change it to your liking. A further explanation on the contents of this file can be found here.
The makefile
In a Linux environment you have a nifty tool called make. This program executes a set of commands listed in a file called makefile or Makefile. For programming the Atmega328p chip my makefile looks like this:CC=avr-gcc
UPLOADER = avrdude
CONVERTER = avr-objcopy
FILENAMES = main.c
PROJECT = blinky
MCU = atmega328p # ATmega328 (Arduino)
PROGRAMMER = usptiny
all: compile hex
compile:
@echo "Cross compiling..."
$(CC) -Wall -mmcu=$(MCU) -Os -D F_CPU=16000000 $ $(FILENAMES) -o $(PROJECT).out
@echo "Done compiling"
hex: $(PROJECT).out
@echo "Converting to hex..."
$(CONVERTER) -j .text -j .data -O ihex $(PROJECT).out $(PROJECT).hex
@echo "Done converting"
upload: $(PROJECT).hex
avrdude -c usbtiny -P usb -p m328p -U flash:w:$(PROJECT).hex:i
clean: *.out *.hex
@echo "Cleaning project...."
rm *.out *.hex
(For a tutorial on makefiles look here.)
The above makefile shows the use of avr-gcc, avrdude and avr-objcopy. These tools can be optained by issueing the following command:
sudo pacman -S avrdude gcc-avr avr-libcThese are also dependencies of the Arduino IDE, so if you already have this up and running the makefile should run.
This makefile uses avr-gcc to compile the main.c file specifically for the selected microcontroller with the selected clock frequency. It is then converted to .hex file using avr-objcopy. This makes it ready for upload to the MCU - a task which is handled by avrdude.
The updated makefile is found at my GitHub page
We are now ready to move on to actual programming which will be described in the next post.
Ingen kommentarer:
Send en kommentar