This is a quick tutorial for beginners that aims to show how to install tools, compile the code with avr-gcc and send it to the MCU with avrdude. It also introduce basics of automation of this task by putting the all instructions into Makefile. The example files (main.c, main.bin, main.hex, Makefile) has been packaged as a .ZIP file and can be downloaded here.
Downloads Archive for AVR and SAM MCUs/MPUs. MAC OS X 64-bit Linux 64-bit. AVR GCC 3.4.3: AVR GCC 3.5.4. Searching for 'mac gcc' gives lots of AVR results, but when you limit the search to this community, nada. I'm pretty experienced with the AVR side of the house, but I have a project where I'm likely to start using an ATSAMS70N19 (I need SDHC, AES and hi-speed USB). The newest 1.8.10 has all the parts that are required inside. One simply needs to trick the Digistump config to use what is included, instead of its own old, out of date, no longer supported snowflake of the AVR tools.
Using AVR Microprocessors Under OS/X. Matt Wright, July 4, 2005. This document explains how to install Mac OS/X versions of avr-gcc, avr-libc, uisp, Pascal Stang's avrlib, and the other tools necessary to write programs and load (aka 'flash') them onto AVR microprocessors. Nov 13, 2012 Fortunately, gcc is supporting the AVR cpu for quite some time now and e.g. The WinAVR toolchain for AVR development under windows is based on this compiler. Many people have already ported these compilers to MacOS X incl. The fink project and others.
Updates
[28.10.2019] Take a look at docker version of AVR Toolchain
1. Installing avr-gcc and tools
To compile C and/or C++ source code of your firmware you will need gcc-avr compiler, the avr-libc C library and avrdude. What is extremely useful, there are complete and easy to install packages for all major platforms.
Linux, Ubuntu
Ubuntu provides packages, so you can just install them using this command.
Mac OSX
Download AVR MacPack. The MacPack disk image has an installer that does everything for you.
Windows
Download WinAVR, which includes everything you need and has a nice installer.
2. Compiling and burning the code
Now that you have the compiler installed, a next step is to compile simple source code into a .BIN file, then generate Intel .HEX file and finally burn this .HEX file to AVR chip using USBasp programmer.
Example code
Here is an example content of main.c file. The code does nothing except getting stuck in an endless loop but it’s always something!
Compiling
The command below will compile your code. It’s GCC so I assume it looks familiar to you and no additional information is required. If you want perform compilation for some other MCU then you need specify appropriate -mmcu option.
After performing successful compilation, you can check program and data memory size with this command.
Generating .HEX
Most programmers will not accept a GNU executable as an input file, so we need to do a little more processing. So the next step is about converting the information form .BIN into .HEX file. The GNU utility that does this is called avr-objcopy.
Burning
The utility called avrdude can program processors using the contents of the .HEX files specified on the command line. With the command below, the file main.hex will be burned into the flash memory. The -p attiny13 option lets avrdude know that we are operating on an ATtiny13 chip. In other words – this option specifies the device. The full list of supported parts can be found here. Note that full-length names are also acceptable (i.e. t13 equals attiny13).
Voila! Chip is programmed.
3. Make and makefiles
Now, we can automate this process by creating a Makefile and putting our commands there. The structure of a Makefile is very simple, and more information about it can be found here. Utility make reads automatically a Makefile file in the folder where you launch it. Take a look at a ready-made example.
If you launch a simple make in the terminal, only label “all” will be executed. When you launch (sudo) make flash label “flash” will be executed, and so on.
4. Summary
Essentially, assuming that our program is in main.c, only those three things are needed to compile and burn the code to AVR chip.
It’s important to highlight that we can easily automate whole process with Makefiles. Sooner or later you will need it!
Related Articles:
- Then you edit the Makefile
Install Necessary Software for AVR Programming:
For the electronics units in the Fab Academy, you will need:
- Avrdude (for programming AVR microcontrollers)
- GCC (to compile C code)
Jump to the instructions for your Operating System:
Ubuntu Software Install
Get and install avrdude / GCC software and dependencies:
Open Terminal and type:
Then type:- type 'y' when asked to do so by your system
Then type: Then type (may already be installed):
Download and Unzip the Firmware:
Move to the desktop
Download the firmware from the Fab Academy Electronics Production page.
Unzip the firmware
Mac OS Software Install
Get and install avrdude / GCC software and dependencies:
- Download and Install Crosspack AVR - Has an installer.
- Get Make (via XCode):
- If you are running Lion or higher - you can download XCode from the Apple App store.
- If you are running a pre-Lion OSX - Get the install disks that came with your mac and install the developer tools.
Download the firmware (right click on the link below and save it to your desktop):
FabISP Firmware for MacOS 10.8.2 (Mountain Lion, possibly for Lion too?)
FabISP Firmware for earlier versions of MacOS
Open terminal navigate to the desktop:
Unzip the firmware.zip directory (the directory will be 'firmware.zip' if you downloaded the earlier version):
Move into the newly created firmware directory on your desktop
Windows Software / Drivers Install
Get and install avrdude / GCC software and dependencies and drivers:
Gcc Download For Mac
- Warning, WinAVR is abandoned.You can use the installer, but before you start, take note of your current system path.
Installing it can destroy your systems path variable! - Download and Install WinAVR - Has a (broken) installer.
- Here is a step-by-step set of instructions - After installing check your systems path variable, if it only contains the path to the winavr installation:
- copy those values
- restore your old path
- add the windavr path back to it
- close any commandprompt window you may have open
- Download the drivers for your version of Windows
- Plug in another FabISP or USBtiny programmer.
- Install the drivers:
Go to the Start menu -> Control Panel -> Device Manager (or run 'mmc devmgmt.msc')- Locate 'FabISP' under 'Other Devices'
- Right click on the 'FabISP'
- Select 'Update Driver Software..'
- Select 'Browse my computer'
- Navigate to the drivers folder you downloaded at step 4 and click on the folder.
- Hit 'ok' to install the drivers for the USBtiny / FabISP
Power the FabISP Board
The board needs power:Avr Gcc Linux
- Make sure that the mini USB connector for the FabISP you are trying to program is plugged into your computer.
- AND that a separate pogramer is plugged in to the 6-pin programming header. (this could be another working FabISP or the ATAVRISP2, a USBtiny, an AVR Dragon, etc.)
If you are using the ATAVRISP2 programmer, you can skip step 7, you do not need to edit the Makefile, it is already set up to work with the ATAVRISP2 If you are using another programmer you will need to edit the Makefile.
Helpful ATAVRISP2 Programmer Light Indicator Messages
If you are using the ATAVRISP2 programmer only. If you connect the programmer to the 6-pin programming header on your FabISP board and you get:
- Green Light: means that the header is soldered correctly, the board is getting power.
- Yellow Light: means that the board is getting power, but most likely the 6-pin programming header is not soldered correctly (re-flow your solder joints / check for cold joints, check for shorts).
- Red Light: means that the board is not getting power - check for shorts.
Edit the Makefile
The Makefile is in the firmware directory that you downloaded. The Makefile is set up to work with the AVRISP2 by default. If you are using another programmer, you will need to edit the Makefile. Ubuntu:
Mac:
Open the Makefile with TextEdit.
Windows:
Open the Makefile with Notepad++.
Make Changes - All OS:
A window will open containing the Makefile. Go to the line that says:
#AVRDUDE = avrdude -c usbtiny -p $(DEVICE) # edit this line for your programmer
AVRDUDE = avrdude -c avrisp2 -P usb -p $(DEVICE) # edit this line for your programmer
- If using the USBtiny programmer or another FabISP
- Remove the '#' in front of the line with 'usbtiny' in it
- Add a '#' to beginning the line with the 'avrisp2' in it to comment it out.
- save the Makefile
Program the FabISP (All OS):
Navigate to the directory where you saved the FabISP firmware. If you followed the instructions above, this will be the desktop.
Open your terminal / command line interface and move to the firmware directory.
Ubuntu / Windows type:
For Mac users who downloaded the modified firmware:
Next you need to compile the firmware.
Type:
If you are successful - you will see this response from the system: Type:If you are successful - you will see this response from the system:
Next, you need to set the fuses so your board will use the external clock (crystal)
Type:
If you are successful - you will see the following response from the system:Next you want to program the board to be an ISP.
Then type:
If you are successful - you will see the following response from the system.Wooo! Success!
Errors
- If you get errors - read the errors and follow instructions.
- If avrdude cannot connect to your board's microcontroller - you should follow the 'Troubleshooting Short Circuits' instructions and ask your instructor for help.
To Verify That Your ISP is working correctly:
Ubuntu 11.10:
Type:
If your FabISP has been successfully programmed, you should see a list of the USB devices plugged into your computer. The FabISP will be listed in a line like the following:Note: Ubuntu 10.10 lists the device as something like:Mac:
Go to the System Profiler > Hardware > USB > Hub:
Step - By - Step:
- Click the 'apple' menu in your main toolbar
- Select 'about this mac'
- Select 'more info'
- Under the 'Contents' menu in the left hand navigation
- Click 'Hardware' to expand the hardware menu (if not already expanded)
- Click 'USB'
- Under the 'USB Device Tree'
- Click 'Hub' to expand the hub menu (if not already expanded)
- 'FabISP' should be listed in the hub menu - Your FabISP device has been successfully programmed and is recognized by your computer.
Windows:
Go to the Start Menu > Hardware and Sound. The FabISP should be listed.
After You Have Programmed the Board:
Remove the 0 ohm resistor and solder bridge as shown in the picture below. Now you can use it as a programmer to program other boards.