Home About Me Weekly Assigments Final Project


Electronics Production

Fab Academy 2018


Week #4


During this week we have learned how to print and solder a PCB to make a Fab ISP. It was my first successful task with soldering electronics I'm really very joyful with this week.

The main task of this week is to build and program a Fab ISP which is an in-system programmer for AVR microcontrollers many versions of these programmers were developed by Fab Labs members over the years.

The first task is to make a PCB Printed Circuit Board which is simply mean to convert designed circuit from a digital format ( PNG photo in our case) into paths drawn on a thin sheet of copper fixed on top of a plastic board. In our Lab we are using milling technic to produce 'Print' PCBs. The small milling machine for this purpose in the lab is Roland SRM-20.

I started with the shown PNG picture of the inner traces of Fab ISP


Internal

Then open Fab Modules ( which is an online CAM software that transfer circuits to a code the machine could understand and operate it(. Now on the web page choose input format as .PNG then upload the picture. Then select output format as Roland mill .rml,and change process to be PCB traces (1\64) 'In this operation I will use a 0.4mm tool diameter' The rest important settings means:

speed(mm/s)=4 means how many mm the machine works in a second while milling.
cut depth control the minus Z distance which the machine goes while cutting.
number of offsets controls how many time the machine will turn around each trace.
offset overlap controls the percentage of commone area betwwen two offset traces.


set1 set2

Now Calculate button will find the traces the milling should follow as shown. Then save the file


set3

Open machine's interface software VPanel for SRM-20


inter

Move manually X and Y axes using arrows inter to your start point then press set orign point to save the zero point.
To set the Z axis origin you should be more careful. Start by using "L" key to untie little bit the cutting tool and push up it then tie is again as shown:


setZ

After that manually down the Z axis using these arrows inter to be closer to the bed, then untie the tool and let it fall until reach the bed as shown in the figure below this will be the zero of the Z save it by pressing on set orign point. Now to be save lift the Z little bit from the bed.


setZ2

After that click on Cut icon and choose saved file and press Add then Output. The machine will take some time to reach to the desired speed then it will start working. Monitor the result of engraving if there is a shiny on traces that means the depth of cut must increase. Select Pause decrease Z orign littel bit the restart cut again.

The result board:


PCB1

Repeat previous steps to do the extirnal cut path on this photo.


external

Now I want to cut so some settings should change. Depth cut must increase to 1.8mm and speed must decrease to . All settings become :


externalset

Now change cutting tool to 0.8 mm, Keep Y and X orign from previous step. change Z orign exactlly as before. then start cut job.
The board after cutting:


PCB2

The final result of the board before soldering :)


PCB4

Now I soldered all this components as shown in diagram below:


FabISP

After solder the board looks like:


PCB5

Then add a Jumper using solder this jumper will use untill programing then it should be removed.


done

Programming Fab ISP

As a first time it really was a very confusing task, but our great teacher Dima helped us to do it successfully.

First, I downloaded Ubuntu 'Open source operating system from Linux' on a USB drive following This tutorial.

Using Arduino IDE software. Make sure to select your board Arduino/Genuino Uno from tool tab also make sure your board connects to a COM port. Now Open ArduinoISP example, as shown in figure, then press Upload wait untill Done uploading message appear. Now this Arduino will program my board just once, then my board will become a Programmer.


arduinIDE

Now plug a USB that has Ubuntu on it, Change computer's disk priority from BIOS to start read from USB not hard disk.

Restart computer, now it's lunch by Ubuntu not Windows. This is my first time here in this new world simple daily task on Windows isn't that simple here just for beginners! Surly the life will become easy again don't worry.

Before start writting commands to program FabISP board I should connect it with arduino Uno which I programmed in previous step using this connection diagram.


Conn1

Now plug Arduino and FabISP to the computer. )Oh there is no smell I didn' barn any thing ^_^ )


PCB7

To program my FabISP there is a list of commands should be written on cmd command window. First group of them are to install suitable drivers for AVR Programming. Start by openning cmd Terminal and type:

sudo apt-get install flex byacc bison gcc libusb-dev avrdude

Then type

sudo apt-get install gcc-avr
select Y when asked

Then write this code

sudo apt-get install avr-libc

Also this

sudo apt-get install libc6-dev

Now use these commands to download the firmware on Desktop and Unzip it
Start with this code to go to Desktop

cd ~/Desktop

To Download type

wget http://academy.cba.mit.edu/classes/embedded_programming/firmware.zip

Unzip file

unzip firmware.zip

To clean object files type

sudo make clean

Then create new files to be a base for program files

sudo make hex

Now open the unzip folder and open Makefile and commenting this line type # before it

#AVRDUDE = avrdude -c avrisp2 -P usb -p $(DEVICE)

Add this line to replace the commenting one

AVRDUDE = avrdude -c stk500v1 -P /dev/ttyACM0 -b19200 -p $(DEVICE)

After editting the file save it and write this command

sudo make fuse

Then

sudo make program

Finally use this command to list connected USB devices

sudo lsusb

The final result on my screen:


screen

Impossible isn't in our dictionary!


hero

Problems and difficulties

Because of misalignment in machine's plate some places doesn't mill correctly, so there are some traces connect with each other as shown:


PCB3

To solve this problem I removed them manually using metal ruler :)


PCB4

The second problem I faced was soldering. In the pastو I tried many times to solder but unfortunately I was very bad. When I start soldering the ATiny44 chip I feel it is very hard to fix it in the correct position when I hardly completed all pins I found that I Flipped The Chip :( I desolder it an resolder it again!!!.

The History of cmd commands

        ubuntu@ubuntu:~$ cd Desktop/
ubuntu@ubuntu:~/Desktop$  sudo apt-get install flex byacc bison gcc libusb-dev avrdude
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package byacc
E: Unable to locate package avrdude
ubuntu@ubuntu:~/Desktop$  sudo apt-get install gcc-avr
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package gcc-avr
ubuntu@ubuntu:~/Desktop$  sudo apt-get install flex byacc bison gcc libusb-dev avrdude
Reading package lists... Done
Building dependency tree       
Reading state information... Done
gcc is already the newest version (4:5.3.1-1ubuntu1).
The following additional packages will be installed:
  libbison-dev libfl-dev libftdi1 libsigsegv2 m4
Suggested packages:
  avrdude-doc bison-doc
The following NEW packages will be installed:
  avrdude bison byacc flex libbison-dev libfl-dev libftdi1 libsigsegv2
  libusb-dev m4
0 upgraded, 10 newly installed, 0 to remove and 385 not upgraded.
Need to get 1,501 kB of archives.
After this operation, 4,607 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 libsigsegv2 amd64 2.10-4 [14.1 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 m4 amd64 1.4.17-5 [195 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 libfl-dev amd64 2.6.0-11 [12.5 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 flex amd64 2.6.0-11 [290 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 libbison-dev amd64 2:3.0.4.dfsg-1 [338 kB]
Get:6 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 bison amd64 2:3.0.4.dfsg-1 [259 kB]
Get:7 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 libftdi1 amd64 0.20-4build1 [15.2 kB]
Get:8 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 libusb-dev amd64 2:0.1.12-28 [29.9 kB]
Get:9 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 avrdude amd64 6.2-5 [291 kB]
Get:10 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 byacc amd64 20140715-1 [56.9 kB]
Fetched 1,501 kB in 1s (753 kB/s) 
Selecting previously unselected package libsigsegv2:amd64.
(Reading database ... 194399 files and directories currently installed.)
Preparing to unpack .../libsigsegv2_2.10-4_amd64.deb ...
Unpacking libsigsegv2:amd64 (2.10-4) ...
Selecting previously unselected package m4.
Preparing to unpack .../archives/m4_1.4.17-5_amd64.deb ...
Unpacking m4 (1.4.17-5) ...
Selecting previously unselected package libfl-dev:amd64.
Preparing to unpack .../libfl-dev_2.6.0-11_amd64.deb ...
Unpacking libfl-dev:amd64 (2.6.0-11) ...
Selecting previously unselected package flex.
Preparing to unpack .../flex_2.6.0-11_amd64.deb ...
Unpacking flex (2.6.0-11) ...
Selecting previously unselected package libbison-dev:amd64.
Preparing to unpack .../libbison-dev_2%3a3.0.4.dfsg-1_amd64.deb ...
Unpacking libbison-dev:amd64 (2:3.0.4.dfsg-1) ...
Selecting previously unselected package bison.
Preparing to unpack .../bison_2%3a3.0.4.dfsg-1_amd64.deb ...
Unpacking bison (2:3.0.4.dfsg-1) ...
Selecting previously unselected package libftdi1:amd64.
Preparing to unpack .../libftdi1_0.20-4build1_amd64.deb ...
Unpacking libftdi1:amd64 (0.20-4build1) ...
Selecting previously unselected package libusb-dev.
Preparing to unpack .../libusb-dev_2%3a0.1.12-28_amd64.deb ...
Unpacking libusb-dev (2:0.1.12-28) ...
Selecting previously unselected package avrdude.
Preparing to unpack .../avrdude_6.2-5_amd64.deb ...
Unpacking avrdude (6.2-5) ...
Selecting previously unselected package byacc.
Preparing to unpack .../byacc_20140715-1_amd64.deb ...
Unpacking byacc (20140715-1) ...
Processing triggers for install-info (6.1.0.dfsg.1-5) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for libc-bin (2.23-0ubuntu9) ...
Processing triggers for doc-base (0.10.7) ...
Processing 33 changed doc-base files, 2 added doc-base files...
Setting up libsigsegv2:amd64 (2.10-4) ...
Setting up m4 (1.4.17-5) ...
Setting up libfl-dev:amd64 (2.6.0-11) ...
Setting up flex (2.6.0-11) ...
Setting up libbison-dev:amd64 (2:3.0.4.dfsg-1) ...
Setting up bison (2:3.0.4.dfsg-1) ...
update-alternatives: using /usr/bin/bison.yacc to provide /usr/bin/yacc (yacc) in auto mode
Setting up libftdi1:amd64 (0.20-4build1) ...
Setting up libusb-dev (2:0.1.12-28) ...
Setting up avrdude (6.2-5) ...
Setting up byacc (20140715-1) ...
Processing triggers for libc-bin (2.23-0ubuntu9) ...
ubuntu@ubuntu:~/Desktop$  sudo apt-get install gcc-avr
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  binutils-avr
Suggested packages:
  task-c-devel gcc-doc avr-libc
The following NEW packages will be installed:
  binutils-avr gcc-avr
0 upgraded, 2 newly installed, 0 to remove and 385 not upgraded.
Need to get 14.1 MB of archives.
After this operation, 74.1 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 binutils-avr amd64 2.25+Atmel3.5.0-2 [1,425 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 gcc-avr amd64 1:4.9.2+Atmel3.5.0-1 [12.7 MB]
Fetched 14.1 MB in 12s (1,155 kB/s)                                            
Selecting previously unselected package binutils-avr.
(Reading database ... 194706 files and directories currently installed.)
Preparing to unpack .../binutils-avr_2.25+Atmel3.5.0-2_amd64.deb ...
Unpacking binutils-avr (2.25+Atmel3.5.0-2) ...
Selecting previously unselected package gcc-avr.
Preparing to unpack .../gcc-avr_1%3a4.9.2+Atmel3.5.0-1_amd64.deb ...
Unpacking gcc-avr (1:4.9.2+Atmel3.5.0-1) ...
Processing triggers for man-db (2.7.5-1) ...
Setting up binutils-avr (2.25+Atmel3.5.0-2) ...
Setting up gcc-avr (1:4.9.2+Atmel3.5.0-1) ...
ubuntu@ubuntu:~/Desktop$  sudo apt-get install avr-libc
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  avr-libc
0 upgraded, 1 newly installed, 0 to remove and 385 not upgraded.
Need to get 4,378 kB of archives.
After this operation, 37.3 MB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 avr-libc all 1:1.8.0+Atmel3.5.0-1 [4,378 kB]
Fetched 4,378 kB in 3s (1,202 kB/s)   
Selecting previously unselected package avr-libc.
(Reading database ... 195450 files and directories currently installed.)
Preparing to unpack .../avr-libc_1%3a1.8.0+Atmel3.5.0-1_all.deb ...
Unpacking avr-libc (1:1.8.0+Atmel3.5.0-1) ...
Processing triggers for man-db (2.7.5-1) ...
Setting up avr-libc (1:1.8.0+Atmel3.5.0-1) ...
ubuntu@ubuntu:~/Desktop$  sudo apt-get install libc6-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libc-dev-bin libc6 libc6-dbg
Suggested packages:
  glibc-doc
The following packages will be upgraded:
  libc-dev-bin libc6 libc6-dbg libc6-dev
4 upgraded, 0 newly installed, 0 to remove and 381 not upgraded.
Need to get 8,411 kB of archives.
After this operation, 2,048 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://security.ubuntu.com/ubuntu xenial-security/main amd64 libc6-dev amd64 2.23-0ubuntu10 [2,079 kB]
Get:2 http://security.ubuntu.com/ubuntu xenial-security/main amd64 libc-dev-bin amd64 2.23-0ubuntu10 [68.7 kB]
Get:3 http://security.ubuntu.com/ubuntu xenial-security/main amd64 libc6-dbg amd64 2.23-0ubuntu10 [3,683 kB]
Get:4 http://security.ubuntu.com/ubuntu xenial-security/main amd64 libc6 amd64 2.23-0ubuntu10 [2,580 kB]
Fetched 8,411 kB in 4s (1,993 kB/s)
Preconfiguring packages ...
(Reading database ... 197925 files and directories currently installed.)
Preparing to unpack .../libc6-dev_2.23-0ubuntu10_amd64.deb ...
Unpacking libc6-dev:amd64 (2.23-0ubuntu10) over (2.23-0ubuntu9) ...
Preparing to unpack .../libc-dev-bin_2.23-0ubuntu10_amd64.deb ...
Unpacking libc-dev-bin (2.23-0ubuntu10) over (2.23-0ubuntu9) ...
Preparing to unpack .../libc6-dbg_2.23-0ubuntu10_amd64.deb ...
Unpacking libc6-dbg:amd64 (2.23-0ubuntu10) over (2.23-0ubuntu9) ...
Preparing to unpack .../libc6_2.23-0ubuntu10_amd64.deb ...
Unpacking libc6:amd64 (2.23-0ubuntu10) over (2.23-0ubuntu9) ...
Setting up libc6:amd64 (2.23-0ubuntu10) ...
Setting up libc-dev-bin (2.23-0ubuntu10) ...
Setting up libc6-dev:amd64 (2.23-0ubuntu10) ...
Setting up libc6-dbg:amd64 (2.23-0ubuntu10) ...
Processing triggers for libc-bin (2.23-0ubuntu9) ...
Processing triggers for man-db (2.7.5-1) ...
ubuntu@ubuntu:~/Desktop$  cd ~/Desktop 
ubuntu@ubuntu:~/Desktop$  wget http://academy.cba.mit.edu/classes/embedded_programming/firmware.zip 
--2018-02-19 13:36:55--  http://academy.cba.mit.edu/classes/embedded_programming/firmware.zip
Resolving academy.cba.mit.edu (academy.cba.mit.edu)... 18.85.8.25
Connecting to academy.cba.mit.edu (academy.cba.mit.edu)|18.85.8.25|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 141728 (138K) [application/zip]
Saving to: ‘firmware.zip’

firmware.zip        100%[===================>] 138.41K   267KB/s    in 0.5s    

2018-02-19 13:36:56 (267 KB/s) - ‘firmware.zip’ saved [141728/141728]

ubuntu@ubuntu:~/Desktop$  unzip firmware.zip 
Archive:  firmware.zip
   creating: fabISP_mac.0.8.2_firmware/
  inflating: fabISP_mac.0.8.2_firmware/.DS_Store  
   creating: __MACOSX/
   creating: __MACOSX/fabISP_mac.0.8.2_firmware/
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/._.DS_Store  
  inflating: fabISP_mac.0.8.2_firmware/main.c  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/._main.c  
  inflating: fabISP_mac.0.8.2_firmware/main.elf  
  inflating: fabISP_mac.0.8.2_firmware/main.hex  
  inflating: fabISP_mac.0.8.2_firmware/main.o  
  inflating: fabISP_mac.0.8.2_firmware/Makefile  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/._Makefile  
  inflating: fabISP_mac.0.8.2_firmware/usbconfig.h  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/._usbconfig.h  
   creating: fabISP_mac.0.8.2_firmware/usbdrv/
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/.DS_Store  
   creating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._.DS_Store  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/asmcommon.inc  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._asmcommon.inc  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/Changelog.txt  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._Changelog.txt  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/CommercialLicense.txt  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._CommercialLicense.txt  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/License.txt  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._License.txt  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/oddebug.c  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._oddebug.c  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/oddebug.h  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._oddebug.h  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/oddebug.o  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/Readme.txt  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._Readme.txt  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/USB-ID-FAQ.txt  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._USB-ID-FAQ.txt  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/USB-IDs-for-free.txt  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._USB-IDs-for-free.txt  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbconfig-prototype.h  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._usbconfig-prototype.h  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbdrv.c  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._usbdrv.c  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbdrv.h  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._usbdrv.h  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbdrv.o  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbdrvasm.asm  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._usbdrvasm.asm  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbdrvasm.o  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbdrvasm.S  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._usbdrvasm.S  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbdrvasm12.inc  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._usbdrvasm12.inc  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbdrvasm128.inc  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._usbdrvasm128.inc  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbdrvasm15.inc  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._usbdrvasm15.inc  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbdrvasm16.inc  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._usbdrvasm16.inc  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbdrvasm165.inc  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._usbdrvasm165.inc  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbdrvasm18-crc.inc  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._usbdrvasm18-crc.inc  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbdrvasm20.inc  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._usbdrvasm20.inc  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/USBID-License.txt  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._USBID-License.txt  
  inflating: fabISP_mac.0.8.2_firmware/usbdrv/usbportability.h  
  inflating: __MACOSX/fabISP_mac.0.8.2_firmware/usbdrv/._usbportability.h  
ubuntu@ubuntu:~/Desktop$ make clean
make: *** No rule to make target 'clean'.  Stop.
ubuntu@ubuntu:~/Desktop$ cd fabISP_mac.0.8.2_firmware/
ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ 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
ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ 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	   1986	      0	   1986	    7c2	main.hex
ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ make fuse
avrdude -c stk500v1 -P /dev/ttyACM0 -b19200 -p attiny44 -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m
avrdude: ser_open(): can't open device "/dev/ttyACM0": Permission denied

avrdude done.  Thank you.

Makefile:120: recipe for target 'fuse' failed
make: *** [fuse] Error 1
ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ make fuse
avrdude -c stk500v1 -P /dev/ttyACM0 -b19200 -p attiny44 -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m
avrdude: ser_open(): can't open device "/dev/ttyACM0": Permission denied

avrdude done.  Thank you.

Makefile:120: recipe for target 'fuse' failed
make: *** [fuse] Error 1
ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ sudo make fuse
avrdude -c stk500v1 -P /dev/ttyACM0 -b19200 -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 (probably t44)
avrdude: reading input file "0xDF"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.01s

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.01s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.02s

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.01s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified

avrdude: safemode: Fuses OK (E:FF, H:DF, L:FF)

avrdude done.  Thank you.

ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ make program
avrdude -c stk500v1 -P /dev/ttyACM0 -b19200 -p attiny44 -U flash:w:main.hex:i
avrdude: ser_open(): can't open device "/dev/ttyACM0": Permission denied

avrdude done.  Thank you.

Makefile:126: recipe for target 'flash' failed
make: *** [flash] Error 1
ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ sudo make program
avrdude -c stk500v1 -P /dev/ttyACM0 -b19200 -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 (probably t44)
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 (1986 bytes):

Writing | ################################################## | 100% 2.88s

avrdude: 1986 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 1986 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 1.45s

avrdude: verifying ...
avrdude: 1986 bytes of flash verified

avrdude: safemode: Fuses OK (E:FF, H:DF, L:FF)

avrdude done.  Thank you.

avrdude -c stk500v1 -P /dev/ttyACM0 -b19200 -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 (probably t44)
avrdude: reading input file "0xDF"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.01s

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.01s

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.01s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified

avrdude: safemode: Fuses OK (E:FF, H:DF, L:FF)

avrdude done.  Thank you.

ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ Isusb
No command 'Isusb' found, did you mean:
 Command 'lsusb' from package 'usbutils' (main)
Isusb: command not found
ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ lsusb
Bus 001 Device 002: ID 8087:8001 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 004: ID 13d3:5652 IMC Networks 
Bus 002 Device 003: ID 8087:07dc Intel Corp. 
Bus 002 Device 002: ID abcd:1234 Unknown 
Bus 002 Device 025: ID 1781:0c9f Multiple Vendors USBtiny
Bus 002 Device 017: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$