Install the following packages
sudo apt-get update sudo apt-get install gcc-avr gdb-avr binutils-avr avr-libc avrdude
You should now have an environment that you can compile and link code for Atmel microprocessors. The last package (avrdude) is what we will use to program the chip. Here is an example of how to blink the LED on pin 1 of the trinket (the red LED).
// blink.c #include <avr/io.h> #include <util/delay.h> // prototype void wait_sec(int seconds); int main (void) { // direction register DDRB |= 0x03; // pin 0 and pin1 as output while(1) { PORTB |= 0x02; // LED ON wait_sec(1); // sleep PORTB &= 0x01; // LED OFF wait_sec(1); // sleep } return 0; } // sleeps the specified amount of seconds void wait_sec(int seconds) { int i; for(i=0; i<seconds; i++) _delay_ms(1000); }
You can compile the code with avr-gcc. At the time of writing this post, I'm using avr-gcc version 4.7.2. For this contrived example, I will not create a makefile, but it's usually good practice to do so.
avr-gcc -I. -I. -g -mmcu=attiny85 -DF_CPU=8000000UL -Os -fpack-struct -fshort-enums -funsigned-bitfields -funsigned-char -Wall -Wstrict-prototypes -Wa,-ahlms=blink.lst -c blink.c -o blink.o avr-gcc -Wl,-Map,myproject.out.map -mmcu=attiny85 -lm -o myproject.out blink.o avr-objcopy -j .text \ -j .data \ -O ihex myproject.out myproject.hex avr-objcopy -j .eeprom \ --change-section-lma .eeprom=0 \ -O ihex myproject.out myproject.ee.hex avr-objcopy: --change-section-lma .eeprom=0x0000000000000000 never used
If things went smoothly, you should now have a file called myproject.hex. This is the binary we will program the chip with using avrdude. To program the trinket, press the reset button so the red LED blinks which signifies it's in bootloader mode. Execute the following to upload and program the chip.
sudo avrdude -c usbtiny -p attiny85 -U flash:w:myproject.hex
avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e930b avrdude: reading input file "myproject.hex" avrdude: input file myproject.hex auto detected as Intel Hex avrdude: writing flash (116 bytes): Writing | ############################ | 55% 0.03savrdude: 6 retries during SPI command Writing | ################################################## | 100% 0.07s avrdude: 116 bytes of flash written avrdude: verifying flash memory against myproject.hex: avrdude: load data flash data from input file myproject.hex: avrdude: input file myproject.hex auto detected as Intel Hex avrdude: input file myproject.hex contains 116 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.01s avrdude: verifying ... avrdude: 116 bytes of flash verified avrdude: safemode: Fuses OK avrdude done. Thank you.Once the chip is programmed, you should see the blink code running.