Electronics Production

Electronics Production


Task: This week's assignment is related to producing printed circuit boards.
In particular we were asked to mill and program the FabISP board, which allows to program new AVR microcontrollers .


It was my first time to make a PCB board , I have poor knowledge about the electronics production
And I`m really excited because in this week I will learn something new.



PCB (Printed Circuit Board) an electronic circuit consisting of thin strips of a conducting material such as copper, which have been etched from
a layer fixed to a flat insu++++++++++++++lating sheet called a printed circuit board, and to which integrated circuits and other components are attached.


Milling the board

In our lab we have Roland SRM-20 milling machine, I will use this machine for PCB production



After downloading 2 .PNG files from the already existing design, one is the outline that is the cut out frame
and the other file represents the traces which are inside cut.

I generated the file using Fab Modules software this program converts the - PNG file- to .Gcode for Roland machine.

I used Fabmodules to create the required (tool path) code for the milling machines.
1/64 size drill bits selected for milling the traces and 1/32 for cutting the PCB respectively.


First step in Fab Modules software is to upload the png file . then chose the output form Roland mill (.rml)




For milling we chose 1/64 PCB traces process.




I chose the following settings:





To make sure that the setting is right we chose to calculate the file :


The problem was that the toolpath wasn't connectedwith some traces.

For solving this problem I re-uploaded a new PNG file and Made a previous setting for the first file.





Then calculate the tool path with parameters :





For milling the boundary I select the png file then set the value, for cut we decrease the speed to be 0.5 mm/s which as a result took more time to cut

we chose 1/32 PCB outline.







Now! My png file converted to G-code so I can start miling using Roland SRM 20 software interface to complete the process.



The important things which I learned from my experiences is to compensate effects of uneven bed surface, it's better to set z-axis zero just under the surface.
I used the multimeter to check if there is conductivity between the Z-axis and the sheet.




For cut the boundary we have to change the drill tool we chose 1/32 drill pit size.




This is how the final result of both cuts looks:




Soldering the componets


It was my first experience in soldering, so it tooke a long time and needed much trial and error.
The components that I used are:





Programming

The software wich I am using is ARDUINO
we use Arduino UNO to help fabISP to act as an ISP, we chose from example Arduino ISP
First, I connect the Arduino board to the USB hub, press on File .. Example select Arduino as ISP



Upload the code




Then I plugged the the arduino with the USB by a cable, checked that the arduino is connected, then I checked the type of arduino.


The upload is finished and the arduino became a programer.



Now it is the time to use Ubuntu, we install the AVR Programming and follow the steps :

Open Terminal and type:
These commands are for the computer to install the suitable drivers:

- sudo apt-get install flex byacc bison gcc libusb-dev avrdude
- sudo apt-get install gcc-avr
then "y" when asked to do so by your system
- sudo apt-get install avr-libc
- sudo apt-get install libc6-de


for downloading the firmware in a convenient location in my computer and unzipping it:

cd ~/Desktop

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

unzip firmware.zip


Then I connect the Arduino and my PCB with wires by following this picture.






After I connected it with arduino, I used terminal to write this commands:

-sudo make clean
(it will delete the executable file and all the object files from the directory)

-sudo make hex
(it will create new files that are up to date and the base for new program files suitable for the system)


Then I opened the MakeFile and commented this line AVRDUDE = avrdude -c avrisp2 -P usb -p $(DEVICE) by adding a hashtag "#"
and instead I typed AVRDUDE = avrdude -c stk500v1 -P /dev/ttyACM0 -b19200 -p $(DEVICE)


Now to Join the executable files with the Makefile we type :
sudo make fuse
to Compile the program :
sudo make program
This compiles the program.


my terminal log.


	 ubuntu@ubuntu:~$ sudo apt-get update
    Ign:1 cdrom://Ubuntu 16.04.3 LTS _Xenial Xerus_ - Release amd64 (20170801) xenial InRelease
    Hit:2 cdrom://Ubuntu 16.04.3 LTS _Xenial Xerus_ - Release amd64 (20170801) xenial Release
    Hit:4 http://security.ubuntu.com/ubuntu xenial-security InRelease              
    Hit:5 http://us.archive.ubuntu.com/ubuntu xenial InRelease                     
    Hit:6 http://us.archive.ubuntu.com/ubuntu xenial-updates InRelease
    Reading package lists... Done
    ubuntu@ubuntu:~$ 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 7s (198 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:~$ 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 7s (1,945 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:~$ 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 7s (555 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:~$ 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 12s (671 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:~$ cd ~/Desktop 
    ubuntu@ubuntu:~/Desktop$ wget http://academy.cba.mit.edu/classes/embedded_programming/firmware.zip
    --2018-02-19 12:32:28--  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   273KB/s    in 0.5s    

    2018-02-19 12:32:29 (273 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$ cd ls
    bash: cd: ls: No such file or directory
    ubuntu@ubuntu:~/Desktop$ ls
    examples.desktop           firmware.zip  ubiquity.desktop
    fabISP_mac.0.8.2_firmware  __MACOSX
    ubuntu@ubuntu:~/Desktop$ cd fabISP_mac.0.8.2_firmware/
    ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ ls
    main.c  main.elf  main.hex  main.o  Makefile  usbconfig.h  usbdrv
    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:119: recipe for target 'fuse' failed
    make: *** [fuse] Error 1
    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:125: recipe for target 'flash' failed
    make: *** [flash] 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:119: 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:119: 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:119: 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:119: recipe for target 'fuse' failed
    make: *** [fuse] Error 1
    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:119: 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$ 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$ lsusb
    Bus 002 Device 005: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
    Bus 002 Device 003: ID 0781:5567 SanDisk Corp. Cruzer Blade
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 003: ID 064e:a21b Suyin Corp. 
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ lsusb
    Bus 002 Device 005: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
    Bus 002 Device 003: ID 0781:5567 SanDisk Corp. Cruzer Blade
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 003: ID 064e:a21b Suyin Corp. 
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ lsusb
    Bus 002 Device 005: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
    Bus 002 Device 003: ID 0781:5567 SanDisk Corp. Cruzer Blade
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 003: ID 064e:a21b Suyin Corp. 
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ lsusb
    Bus 002 Device 005: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
    Bus 002 Device 003: ID 0781:5567 SanDisk Corp. Cruzer Blade
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 003: ID 064e:a21b Suyin Corp. 
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ lsusb
    Bus 002 Device 083: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
    Bus 002 Device 003: ID 0781:5567 SanDisk Corp. Cruzer Blade
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 003: ID 064e:a21b Suyin Corp. 
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ lsusb
    Bus 002 Device 083: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
    Bus 002 Device 003: ID 0781:5567 SanDisk Corp. Cruzer Blade
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 003: ID 064e:a21b Suyin Corp. 
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ lsusb
    Bus 002 Device 083: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
    Bus 002 Device 003: ID 0781:5567 SanDisk Corp. Cruzer Blade
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 003: ID 064e:a21b Suyin Corp. 
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ lsusb
    Bus 002 Device 083: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
    Bus 002 Device 003: ID 0781:5567 SanDisk Corp. Cruzer Blade
    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 003: ID 064e:a21b Suyin Corp. 
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ 


Screenshot