##Embedded Programming Notes ######by Jonathan Bobrow
Here is a quick and dirty explanation of the process for getting your C program onto an ATtiny using the FabISP.
In short, this is using the included make file that Neil provides. The following three commands will allow you to (1)compile your C application, (2)set fuses on your ATtiny, (3)upload your embedded program to the ATtiny.
make -f <name_of_application>.make
make -f <name_of_application>.make program-usbtiny-fuses
make -f <name_of_application>.make program-usbtiny
note: you only need to do step 2 on the first time (setting the fuses can be a 1 time thing)
note deux: check to make sure your ISP is connected properly and that your board has power (i.e. not just the ISP, also connect an FTDI or other power source), you will get errors otherwise.
tercera nota: if you want to check that your FabISP is showing up connected to USB, on a mac, you can enter this command: system_profiler SPUSBDataType
into terminal or this command ioreg -p IOUSB -w0 | sed 's/[^o]*o //; s/@.*$//' | grep -v '^Root.*'
for a succint list of just the names
##Step 1 Making our Hex file (translating from C to machine language which the ATtiny is happy to obey)
$ make -f blink_button.c.make
avr-gcc -mmcu=attiny44 -Wall -Os -DF_CPU=20000000 -I./ -o blink_button.out blink_button.c
In file included from blink_button.c:2:0:
/usr/local/CrossPack-AVR-20131216/avr/include/avr/delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." [-Wcpp]
#warning "This file has been moved to <util/delay.h>."
^
avr-objcopy -O ihex blink_button.out blink_button.c.hex;\
avr-size --mcu=attiny44 --format=avr blink_button.out
AVR Memory Usage
----------------
Device: attiny44
Program: 108 bytes (2.6% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
##Step 2 Now we have to set our Fuses on the ATtiny, so we do this step once (this tells the chip what speed to operate at among other things if you so please)
You will only need to set your Fuses once, so skip this step when testing out modifications to your code to save time.
$ make -f blink_button.c.make program-usbtiny-fuses
avr-objcopy -O ihex blink_button.out blink_button.c.hex;\
avr-size --mcu=attiny44 --format=avr blink_button.out
AVR Memory Usage
----------------
Device: attiny44
Program: 96 bytes (2.3% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
avrdude -p t44 -P usb -c usbtiny -U lfuse:w:0x7E:m
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9207
avrdude: reading input file "0x7E"
avrdude: writing lfuse (1 bytes):
Writing | ################################################## | 100% 0.00s
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0x7E:
avrdude: load data lfuse data from input file 0x7E:
avrdude: input file 0x7E contains 1 bytes
avrdude: reading on-chip lfuse data:
Reading | ################################################## | 100% 0.00s
avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: safemode: Fuses OK (H:FF, E:DF, L:7E)
avrdude done. Thank you.
##Step 3 Now we want to actually write the machine language onto the ATtiny, so this command will do just that. Note that it first erases the existing application, then proceeds to write in its place.
$ make -f blink_button.c.make program-usbtiny
avr-objcopy -O ihex blink_button.out blink_button.c.hex;\
avr-size --mcu=attiny44 --format=avr blink_button.out
AVR Memory Usage
----------------
Device: attiny44
Program: 108 bytes (2.6% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
avrdude -p t44 -P usb -c usbtiny -U flash:w:blink_button.c.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9207
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "blink_button.c.hex"
avrdude: input file blink_button.c.hex auto detected as Intel Hex
avrdude: writing flash (108 bytes):
Writing | ################################################## | 100% 0.13s
avrdude: 108 bytes of flash written
avrdude: verifying flash memory against blink_button.c.hex:
avrdude: load data flash data from input file blink_button.c.hex:
avrdude: input file blink_button.c.hex auto detected as Intel Hex
avrdude: input file blink_button.c.hex contains 108 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.15s
avrdude: verifying ...
avrdude: 108 bytes of flash verified
avrdude: safemode: Fuses OK (H:FF, E:DF, L:7E)
avrdude done. Thank you.
For more help, check sources such as Adafruit or google and you will surely be led to many HTMAA class pages :) Also, don't forget to email your class list, the shared knowledge and search power of your class is quite powerful!