Block Diagram
There were three main blocks in the AVR programmer. The attiny84, the USB and the ISP. The programmer is a link between a PC and a microcontroller. It uses the USB to communicate with the PC and the ISP to communicate with the microcontroller
                               
                Circuit Design
The circuit is simple and does not have many elements. Mainly, it has six elements. The Attiny, USB type B, ISP 6-pin header, voltage clippers, bypass capacitors and 20 MHz resonator. The schematic and layout were designed using EAGLE.
● The external clock source is for more accuracy.
				● The voltage clippers diodes are zeners that are used to regulate the voltage across the USB from 5 to 3.3 volts.
				● The USB D- line is the one being pulled HIGH with a 1.5K resistor to identify the USB as a low speed device to the host.
				● A 1µF capacitor to reduce power supply noise.
				● A 0Ω resistor is connected between the reset of the ISP and the reset of the Attiny that should
				be removed after programming the board to avoid reprogramming of the board
                PCB Layout:
The PCB Design was challenging where it had to be a small PCB but the used components were THT packages and took a lot of space on a single layer PCB. This meant that routing all the traces of the ATTiny84 with the ISP header pins and the USB pins was difficult but it was easier to put the components in the assembling process.
Throughout the designing process a Design Rule Check was followed to output the layout according to standards as mentioned down below.
				● minimum trace clearance: 0.5mm
				● minimum Pad clearance: 0.5mm
				● minimum distance between components and board dimensions: 1.5mm
				● minimum drill/hole: 0.8mm
				● minimum trace width: 0.5mm
Some components had special requirements for the routing process. The first component was the resonator which needs its two traces to be exactly equal in length to avoid latency due signal traveling which will affect the frequency and introduce error when used as an external clock to the ATTiny84. The second component was the USB that has D+ and D- differential pair pins that require to be routed next to each other and approximately the same length.
                
                Fabrication and Assembly
In this project, we used the SRM-20. The PCB was created in three stages. First, the traces, using a V-bit of 1.15mm tip. Secondly, the drill holes, using a 0.8 milling bit. Third, is the contour, using a 1.6 milling bit. The PCB is about 5.3*5.7 cm. After creating the PCB, the components were soldiered on it. All of the components were THT.
Firmware and Testing
To program the board, you need to use another programmer. In the project, the Arduino UNO was used following this tutorial. The following connections were made
| Arduino | Board ISP | 
|---|---|
| D10 | Reset | 
| D11 | MOSI | 
| D12 | MISO | 
| D13 | SCK | 
| GND | GND | 
Testing
The necessary software for each operating system can be found in this tutorial. In this project we used Ubuntu on Oracle VM VirtualBox. After installing the necessary software, the makefile should be updated for the kind of programmer used in this case, arduino. The FABISP firmware was used. Finally the board was programmed.
Challenges
Creating this board there were some obstacles and mistakes we had to fix. These were the mostimportant problems we faced.
● The first layout design of the board was made without the DRC and as a result the traces on the actual PCB had a lot of copper around them which made them shorted together.
				
				● It's recommended to use linux rather than windows. This is because Windows had
				miscellaneous problems where it couldn't install AVRdude correctly and couldn't run the
				makefile due to errors.
				● It is recommended to use a capacitor between the reset pin and the ground pin to avoid
				fritzing. Otherwise, you will not be able to set the fuses of your board.
