Fab Academy 2020 - "How to make almost anything"
  
 
 
 This week the design is ready, so we will start preparing the design for the machine
This week the design is ready, so we will start preparing the design for the machine
 
 







 It produces the final shape of the board
It produces the final shape of the board

The electronic components I used are listed in the below table.
| Component | Quantity | 
|---|---|
| ATTiny 44 microcontroller | 1 | 
| 1uf Capacitor | 1 | 
| 100 Ohm Resistor | 2 | 
| 49 Ohm Resistor | 1 | 
| 0 Ohm Resistor | 1 | 
| 10K Ohm Resistor | 1 | 
| pull up Resistors | 1 | 
| 20 MHz Crystal | 1 | 
| 1sp | 1 | 








 
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:7.4.0-1ubuntu2.3).
bison is already the newest version (2:3.0.4.dfsg-1build1).
flex is already the newest version (2.6.4-6).
libusb-dev is already the newest version (2:0.1.12-31).
avrdude is already the newest version (6.3-4).
byacc is already the newest version (20140715-1build1).
The following packages were automatically installed and are no longer required:
  efibootmgr libfwup1 libwayland-egl1-mesa
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
ubuntu@ubuntu:~$ sudo apt-get install gcc-avr
Reading package lists... Done
Building dependency tree       
Reading state information... Done
gcc-avr is already the newest version (1:5.4.0+Atmel3.6.0-1build1).
The following packages were automatically installed and are no longer required:
  efibootmgr libfwup1 libwayland-egl1-mesa
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
ubuntu@ubuntu:~$ sudo apt-get install avr-libc
Reading package lists... Done
Building dependency tree       
Reading state information... Done
avr-libc is already the newest version (1:2.0.0+Atmel3.6.0-1).
The following packages were automatically installed and are no longer required:
  efibootmgr libfwup1 libwayland-egl1-mesa
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
ubuntu@ubuntu:~$ sudo apt-get install libc6-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libc6-dev is already the newest version (2.27-3ubuntu1).
The following packages were automatically installed and are no longer required:
  efibootmgr libfwup1 libwayland-egl1-mesa
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
ubuntu@ubuntu:~$ cd ~/Desktop
ubuntu@ubuntu:~/Desktop$ wget http://academy.cba.mit.edu/classes/embedded_programming/firmware.zip
--2020-02-25 11:36:03--  http://academy.cba.mit.edu/classes/embedded_programming/firmware.zip
Resolving academy.cba.mit.edu (academy.cba.mit.edu)... 18.27.130.25
Connecting to academy.cba.mit.edu (academy.cba.mit.edu)|18.27.130.25|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 141728 (138K) [application/zip]
Saving to: ‘firmware.zip’
firmware.zip              100%[==================================>] 138.41K  --.-KB/s    in 0.08s   
2020-02-25 11:36:05 (1.69 MB/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 fabISP_mac.0.8.2_firmware/
ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$ sudo 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$ sudo 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	   1984	      0	   1984	    7c0	main.hex
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.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$ 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 (1984 bytes):
Writing | ################################################## | 100% 2.79s
avrdude: 1984 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 1984 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 1.40s
avrdude: verifying ...
avrdude: 1984 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 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 17ef:608c Lenovo 
Bus 001 Device 003: ID 17ef:608d Lenovo 
Bus 001 Device 002: ID 8087:0a2a Intel Corp. 
Bus 001 Device 009: ID 1781:0c9f Multiple Vendors USBtiny
Bus 001 Device 005: ID 0781:5567 SanDisk Corp. Cruzer Blade
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ubuntu@ubuntu:~/Desktop/fabISP_mac.0.8.2_firmware$