week 7: embedded programming

video
this week i programmed by LED
board using the fabISP
first i had to program the fabISP, which I tried to do in
windows, but quickly got discouraged by winAVR
switching to mac, I found it much easier to run commands
through terminal
i then programmed the fabISP and then the board through a
combination of avrdude and arduino.
avrdude output:
1. ISP
Last login: Mon Oct 27 12:49:12 on console
dhcp-18-111-1-36:~ moose$ cdcd Desktop/fabISP_mac.0.8.2_firmware
-bash: cdcd: command not found
dhcp-18-111-1-36:~ moose$ cd Desktop/fabISP_mac.0.8.2_firmware
dhcp-18-111-1-36:fabISP_mac.0.8.2_firmware moose$ make clean
rm -f main.hex main.lst main.obj main.cof main.list main.map
main.eep.hex main.elf *.o usbdrv/*.o main.s usbdrv/oddebug.s
usbdrv/usbdrv.s
dhcp-18-111-1-36:fabISP_mac.0.8.2_firmware moose$ make hex
avr-gcc -Wall -Os -DF_CPU=20000000
-Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c
usbdrv/usbdrv.c -o usbdrv/usbdrv.o
avr-gcc -Wall -Os -DF_CPU=20000000
-Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -x
assembler-with-cpp -c usbdrv/usbdrvasm.S -o usbdrv/usbdrvasm.o
avr-gcc -Wall -Os -DF_CPU=20000000
-Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c
usbdrv/oddebug.c -o usbdrv/oddebug.o
avr-gcc -Wall -Os -DF_CPU=20000000
-Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c main.c -o
main.o
main.c:88:13: warning: always_inline function might not be
inlinable [-Wattributes]
static void delay ( void )
^
avr-gcc -Wall -Os -DF_CPU=20000000
-Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -o main.elf
usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o main.o
rm -f main.hex main.eep.hex
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
avr-size main.hex
text
data bss
dec
hex filename
0
2002
0 2002
7d2 main.hex
dhcp-18-111-1-36:fabISP_mac.0.8.2_firmware moose$ sude make fuse
-bash: sude: command not found
dhcp-18-111-1-36:fabISP_mac.0.8.2_firmware moose$ sudo make fuse
Password:
avrdude -c avrispmkii -P usb -p attiny44 -U hfuse:w:0xDF:m
-U lfuse:w:0xFF:m
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## |
100% 0.02s
avrdude: Device signature = 0x1e9207
avrdude: reading input file "0xDF"
avrdude: writing hfuse (1 bytes):
Writing | ################################################## |
100% 0.00s
avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDF:
avrdude: load data hfuse data from input file 0xDF:
avrdude: input file 0xDF contains 1 bytes
avrdude: reading on-chip hfuse data:
Reading | ################################################## |
100% 0.00s
avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):
Writing | ################################################## |
100% 0.01s
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF 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:FF)
avrdude done. Thank you.
dhcp-18-111-1-36:fabISP_mac.0.8.2_firmware moose$ sudo make
program
avrdude -c avrispmkii -P usb -p attiny44 -U
flash:w:main.hex:i
avrdude: stk500v2_command(): command failed
avrdude: stk500v2_program_enable(): bad AVRISPmkII connection
status: Unknown status 0x00
avrdude: initialization failed, rc=-1
Double check
connections and try again, or use -F to override
this check.
avrdude done. Thank you.
Makefile:124: recipe for target 'flash' failed
make: *** [flash] Error 1
dhcp-18-111-1-36:fabISP_mac.0.8.2_firmware moose$ make clean
rm -f main.hex main.lst main.obj main.cof main.list main.map
main.eep.hex main.elf *.o usbdrv/*.o main.s usbdrv/oddebug.s
usbdrv/usbdrv.s
dhcp-18-111-1-36:fabISP_mac.0.8.2_firmware moose$ make hex
avr-gcc -Wall -Os -DF_CPU=20000000
-Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c
usbdrv/usbdrv.c -o usbdrv/usbdrv.o
avr-gcc -Wall -Os -DF_CPU=20000000
-Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -x
assembler-with-cpp -c usbdrv/usbdrvasm.S -o usbdrv/usbdrvasm.o
avr-gcc -Wall -Os -DF_CPU=20000000
-Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c
usbdrv/oddebug.c -o usbdrv/oddebug.o
avr-gcc -Wall -Os -DF_CPU=20000000
-Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c main.c -o
main.o
main.c:88:13: warning: always_inline function might not be
inlinable [-Wattributes]
static void delay ( void )
^
avr-gcc -Wall -Os -DF_CPU=20000000
-Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -o main.elf
usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o main.o
rm -f main.hex main.eep.hex
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
avr-size main.hex
text
data bss
dec
hex filename
0
2002
0 2002
7d2 main.hex
dhcp-18-111-1-36:fabISP_mac.0.8.2_firmware moose$ sudo make fuse
Password:
avrdude -c avrispmkii -P usb -p attiny44 -U hfuse:w:0xDF:m
-U lfuse:w:0xFF:m
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## |
100% 0.01s
avrdude: Device signature = 0x1e9207
avrdude: reading input file "0xDF"
avrdude: writing hfuse (1 bytes):
Writing | ################################################## |
100% 0.00s
avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDF:
avrdude: load data hfuse data from input file 0xDF:
avrdude: input file 0xDF contains 1 bytes
avrdude: reading on-chip hfuse data:
Reading | ################################################## |
100% 0.00s
avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):
Writing | ################################################## |
100% 0.01s
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF 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:FF)
avrdude done. Thank you.
dhcp-18-111-1-36:fabISP_mac.0.8.2_firmware moose$ sudo make
program
Password:
avrdude -c avrispmkii -P usb -p attiny44 -U
flash:w:main.hex:i
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## |
100% 0.02s
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 "main.hex"
avrdude: writing flash (2002 bytes):
Writing | ################################################## |
100% 7.31s
avrdude: 2002 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: load data flash data from input file main.hex:
avrdude: input file main.hex contains 2002 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## |
100% 7.26s
avrdude: verifying ...
avrdude: 2002 bytes of flash verified
avrdude: safemode: Fuses OK (H:FF, E:DF, L:FF)
avrdude done. Thank you.
avrdude -c avrispmkii -P usb -p attiny44 -U hfuse:w:0xDF:m
-U lfuse:w:0xFF:m
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## |
100% 0.01s
avrdude: Device signature = 0x1e9207
avrdude: reading input file "0xDF"
avrdude: writing hfuse (1 bytes):
Writing | ################################################## |
100% 0.00s
avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDF:
avrdude: load data hfuse data from input file 0xDF:
avrdude: input file 0xDF contains 1 bytes
avrdude: reading on-chip hfuse data:
Reading | ################################################## |
100% 0.00s
avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):
Writing | ################################################## |
100% 0.00s
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF 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:FF)
avrdude done. Thank you.
dhcp-18-111-1-36:fabISP_mac.0.8.2_firmware moose$
2. bootloading:
Last login: Mon Oct 27 16:38:39 on ttys000
dhcp-18-111-1-36:~ moose$ cd Desktop/hello.echo
dhcp-18-111-1-36:hello.echo moose$ sudo make -f
hello.ftdi.44.echo.c.make program-usbtiny
Password:
avr-gcc -mmcu=attiny44 -Wall -Os -DF_CPU=20000000 -I./ -o
hello.ftdi.44.echo.out hello.ftdi.44.echo.c
avr-objcopy -O ihex hello.ftdi.44.echo.out
hello.ftdi.44.echo.c.hex;\
avr-size --mcu=attiny44 --format=avr hello.ftdi.44.echo.out
AVR Memory Usage
----------------
Device: attiny44
Program: 758 bytes (18.5% Full)
(.text + .data + .bootloader)
Data: 64 bytes
(25.0% Full)
(.data + .bss + .noinit)
avrdude -p t44 -P usb -c usbtiny -U
flash:w:hello.ftdi.44.echo.c.hex
avrdude: initialization failed, rc=-1
Double check
connections and try again, or use -F to override
this check.
avrdude done. Thank you.
hello.ftdi.44.echo.c.make:28: recipe for target
'program-usbtiny' failed
make: *** [program-usbtiny] Error 1
dhcp-18-111-1-36:hello.echo moose$ sudo make -f
hello.ftdi.44.echo.c.make program-usbtiny
Password:
avr-objcopy -O ihex hello.ftdi.44.echo.out
hello.ftdi.44.echo.c.hex;\
avr-size --mcu=attiny44 --format=avr hello.ftdi.44.echo.out
AVR Memory Usage
----------------
Device: attiny44
Program: 758 bytes (18.5% Full)
(.text + .data + .bootloader)
Data: 64 bytes
(25.0% Full)
(.data + .bss + .noinit)
avrdude -p t44 -P usb -c usbtiny -U
flash:w:hello.ftdi.44.echo.c.hex
avrdude: Error: Could not find USBtiny device (0x1781/0xc9f)
avrdude done. Thank you.
hello.ftdi.44.echo.c.make:28: recipe for target
'program-usbtiny' failed
make: *** [program-usbtiny] Error 1
dhcp-18-111-1-36:hello.echo moose$ sudo make -f
hello.ftdi.44.echo.c.make program-usbtiny
Password:
avr-objcopy -O ihex hello.ftdi.44.echo.out
hello.ftdi.44.echo.c.hex;\
avr-size --mcu=attiny44 --format=avr hello.ftdi.44.echo.out
AVR Memory Usage
----------------
Device: attiny44
Program: 758 bytes (18.5% Full)
(.text + .data + .bootloader)
Data: 64 bytes
(25.0% Full)
(.data + .bss + .noinit)
avrdude -p t44 -P usb -c usbtiny -U
flash:w:hello.ftdi.44.echo.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 "hello.ftdi.44.echo.c.hex"
avrdude: input file hello.ftdi.44.echo.c.hex auto detected as
Intel Hex
avrdude: writing flash (758 bytes):
Writing | ################################################## |
100% 0.91s
avrdude: 758 bytes of flash written
avrdude: verifying flash memory against
hello.ftdi.44.echo.c.hex:
avrdude: load data flash data from input file
hello.ftdi.44.echo.c.hex:
avrdude: input file hello.ftdi.44.echo.c.hex auto detected as
Intel Hex
avrdude: input file hello.ftdi.44.echo.c.hex contains 758 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## |
100% 1.78s
avrdude: verifying ...
avrdude: 758 bytes of flash verified
avrdude: safemode: Fuses OK (H:FF, E:DF, L:62)
avrdude done. Thank you.
dhcp-18-111-1-36:hello.echo moose$
one key for me was the attiny/arduino pin # snag:

(from highlowtech)
this, when compared to my board schematic

shows that my LED is pin 6, which for arduino is pin 7
and my button is pin 10, which for arduino is pin 3
i overlooked this and spent quite a while thinking something
else was wrong.
anyways, i programming through arduino was easy, as long as
you select the correct ports

choosing "attiny44 (external 20 MHz clock)" for board

choosing "/dev/tty.usbserial..." for Serial Port

choosing "USBtinyISP" for Programmer
next steps: customizing the programs
*thanks to Will for the pointers!