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. This is intended for people who have used these tools on the Planet CCRMA Linux environment (e.g., in the context of CCRMA's 250a class or Human-Computer Interaction summer workshop), but it may also be useful to others.
At the end of the day you need to have about 58 Mb of compiler tools, libraries, and documentation in /usr/local/avr, and about another 2.4 Mb of Pascal Stang's avrlib ("AVR Library") in ~/avrlib. If you're lucky you can just download my versions, unpack them, put them in the right places, and be done with it.
sudo mv gnumake /usr/bin sudo ln -s /usr/bin/gnumake /usr/bin/make
sudo mv avr /usr/local
set path=($path /usr/local/avr/bin) setenv AVR /usr/local/avr setenv AVRLIB ~/avrlib setenv UISP_PORT /dev/tty.your-serial-device-here
If you use the bash shell, add these six lines to the .bashrc file in your home directory:
PATH=$PATH:/usr/local/avr/bin
export PATH AVR=/usr/local/avr export AVR AVRLIB=~/avrlib export AVRLIB
It's a good idea to put the AVR tools in /usr/local/avr because they're updated frequently, so it's nice to have them all in a single location. Plus, that makes it easier to install my versions from the Stuffit archives above.
It's a convention at CCRMA that avrlib lives in each user's home directory, so if you put avrlib in your OSX home directory, you have less to change when you copy over AVR projects from your CCRMA Linux account.
If you're even more brave, you can go to http://www.nongnu.org/avr-libc/user-manual/install_tools.html and follow the links to the latest versions of binutils, gcc, avr-libc, and uisp. The versions listed above (namely, binutils-2.15, gcc-3.4.3, avr-libc-1.2.3, and uisp-20050207) were the most recent as of April 2005 when I downloaded and compiled everything, and they seem to be mutually-compatible as far as I can tell. But by all means, if you like to be on the bleeding edge and enjoy running configure scripts and building software, go got it. Please let me know [matt at CCRMA] of your experiences with this.
Modern Apple Macintosh computers do not come with serial ports, so you will have to use a USB-to-Serial adapter. I've personally had success with the Keyspan UPR-112 and the Keyspan USA-19 devices, and a lack of success with an unlabeled generic device known as "Prolific" or "BF". I've heard that in general these tools work only with Keyspan hardware; please let me know [matt at CCRMA] of your experiences with other hardware. If you're physically at CCRMA in spring of 2005, you're welcome to borrow one or both of my serial to USB devices.
All of these USB devices require drivers, which generally come on a CD when you buy the device, but are also available for download from the manufacturer's website (for example, http://www.keyspan.com/downloads/macosx).
Once you install the driver and plug in the USB device, it will appear as a Unix tty device. For example, my Keyspan US-19 appears as /dev/tty.KeySerial1 and my Keyspan UPR-112 appears as /dev/tty.UPSH112I3b13P1.1
It's easy to look for these files with ls from a Terminal window:
ls /dev/tty.*
You'll need to add the name of this ersatz serial port to a makefile, for example, like this:
UISP_PORT=/dev/tty.KeySerial1
or, add this line to your .cshrc file along with the other setenv lines above.
CCRMA's example AVR programs rely on the following to compile and load:
Many of CCRMA's example programs use macros including CBI and SBI to clear and set individual bits of I/O ports. These old macros are now no longer supported by avr-libc, so if you've got a recent enough version of avr-libc that do not include those macros, make sure you have a recent enough version of Pascal Stang's avrlib (March 2005 or later) that does include them. (which you will if you are following these instructions)
The silver lining is that the AVR toolchain now supports this programming style for reading and writing individual bits from I/O ports, which I personally prefer:
PORTA = 0x01;
PORTB |= 0x02;
PORTC &= ~0x04;
var = PIND;
My version of avrlib/encoder.h includes an extra definition, of GIMSK, which is necessary to make CCRMA's encoder demos work:
#define GIMSK GICR // Kludge until Pascal fixes this in avrlib (MW 050524)
For projects that use OpenSoundControl (to get data from the AVR over a serial port to Pd), the makefile has to include $(AVRLIB)/ccrma/OSC-client.c in the list of files in the SRC variable. Basically, anywhere you see
$(AVRLIB)/ccrma/osc.c
in a makefile, make it say
$(AVRLIB)/ccrma/osc.c $(AVRLIB)/ccrma/OSC-client.c
To get the AVRmini to talk to Pd on your OSX machine via OSC over Serial over USB (!), see Jesse Fox's excellent instructions:
http://ccrma.stanford.edu/~jrobfox/OSC_PD_OSX.html
Somebody should replicate the functionality of the dumpOSCSerial object for Max/MSP.