Skip to content

5. Electronics production

group assignment:

Characterize the design rules for your PCB production process

individual assignment:

Make an in-circuit programmer by milling the PCB, check if you can program it, then optionally try other PCB processes

  • ATtiny45 Sean Tomás Jonathan Brian Zaerc
  • ATtiny44 Ali Valentin Bas Andy David hello.ISP.44.cad board components traces interior hello.ISP.44.res.cad board traces interior inventory microcontroller crystal USB connector ribbon connector Zener diode jumper programming
  • USB timing
1. PCB_Contour.pdf
2. PCB_Contour.svg

This week I’m going to learn how to make a PCB using our laser cutter.

Weekly Hero Shot

5.1 Group assignement

Electronic class

We had a session with Jonah who told us more about microcontrollers. Especially the ATTiny family and their architecture.

We learnt there are different sub systems in the microcontroller :

  • Registers
  • Bus
  • ALU (Unité Logique Algorythmique)
  • Flash memory

All these parts are connected and communicate through different codes (binary or hexadecimal) and using different logic (boolean, sequential) using things like buffers or logic gates.

To program these chips we need to use C code, we then put in an assembly which transforms it in hexadecimal for the chip to make it work.

To transfer the code we use an ISP (In System Program)

Microcontroller architecture
ISP connectivity

Characterizing the PCB production process

Using the lasercutter

We have a fiber laser in the lab which is able to remove copper to create a PCB. We have two kind of material to make PCB :

  • FR01 : Difficult to engrave but easy to cuts
  • FR04 : Easier to engrave but difficult to cut (toxic)

We decided to make Brian’s ATTiny programmer as a test.

Raster the path

We first double taped the FR04 board on an aluminium plate to make sure it’s flat.

To have the best results we need to use 1200 dpi monochrome image.

Then we used the following parameters to create the PCB paths an the epilog M2 30W fiber laser.

  • Speed : 40
  • Power : 100
  • Frequency : 1
  • Number of passes : 11
  • Time per passes : 2 mn 5 s
First pass
eleventh pass

We identified two ways to know when all the copper is removed :

  • When the light from the laser goes from green to yellow
  • Using a multimeter to check if there still are some copper (connectivity)
First pass
eleventh pass

NOTE : After some tests we found oter settings which better work :

  • Speed : 16
  • Power : 100
  • Frequency : 1
  • Number of passes : 4
Vector cut the outer part

After this, we cut the outer part of the PCB using the CO2 laser.

First we had to make a contour out of Brian’s image using inkscape

Then we used the following parameters to create the PCB contour an the epilog M2 75W CO2 laser :

  • Speed : 30
  • Power : 70
  • Frequency : 100
  • Number of passes : 25
  • Time per passes : 9 s
Finishing the parts

We used a spatula to remove the PCB and pure alcohol to clean everything.

NOTE : It’s note easy to identify when the PCB is cut and it leaves some burnt areas. It may be interesting to cut the outer part using a milling machine and then use the fiber to remove the copper. Also we damaged the PCB while removing it with a spatula.

5.2 Personal assignment

Using the milling machine and a laser cutter

Milling the contours

The PCB milling machine in the lab was no more use as making a PCB with the lasercutter is easier. However, I have one in my lab so I decided to test something. I was very pleased by the fact to raster the copper away but I wasn’t pleased with the CO2 cutting, which let some burn marks. I decided to try to cut the outter part of the pcb using the milling machine then use the fiber to raster the copper and have a nice pcb.

I used FR4 plate that I taped to the waste bed. I used a 0.8mm cutting bit to do the contours. I used it to set the XY origin.

The FR4 plate
XY origin

Then I placed the bit at the center of the plate and late it go down until it touched the plate. I first used some paper, letting the bit go down until I could move it. At this point, I know that I’m at around 0.10mm from the surface. I then let the bit go down 0.01mm at the time and use a multimeter to see when I’ll have a contact.

Z origin
Checking connections

After having a contact, I go down about 0.03mm because the tape will absorb a bit of the tension. Ounce I was done, I started milling the parts. I then cut few parts in case I encounter any issue afterwards (Raster the copper, soldering …)

Job completed
Parts completed

Making a template for easy origin

I used a piece of 10mm thick MDF to make a setup in order align my parts and properly set the XY origin for the laser cutter (which is crucial)

Raster the copper

I cleaned the copper using alcohol and then taped it on my MDF board and set my origin as shown on the photo. I started making the parts and ounce again made a few.

Placement and origin
Few tests made

Mistakes were made. While I cut the the board using the milling machine, I didn’t encounter the diameter of the bit I used so my parts were slittly smaller then they where supposed to. Yet it was big enough to fit all the paths. I managed to make four properly, two failed due to missalignement.

Soldering all the components

I first cleaned everything using alcohol. I used a multimeter to check if I had connectivity where it was supposed to. Everything worked so I picked one and started soldering.

Cleaning with alcohol
Checking connections

Here are the materials I used :

  • my PCB
  • a soldering iron
  • some soldering wire
  • a fume extractor
  • a wet sponge

I did my soldering from the smaller parts to the bigger ones and starting from the center then going away from it. I first started with the microcontroller. I made some mistakes during the soldering :

  • I had a cold soldering
  • My main problem was that I didnt heat enough the copper
  • I did’nt get a proper alignement of the part on my PCB

After some tries I fixed some issues and continued the soldering.

First soldering
Few more

I did some more soldering and finally everything was soldered. I check using a mutlimeter if everyting was fine. It seemed ok.

Almost there

I finally plugged it to a computer and saw the red light (I was pleased at this point) I could then move on and upload a code to make the PCB a programmer.

Set the PCB as a programmer

This part was really frustrated for me.

I followed very carefully Brian’s tutorial to upload the code.

First I had to install a toolchain kit from ATMEL website. I also needed to install AVRdude to be able to communicate with a programmer.

I tried three different methods to upload my code :

  • Using Windowsand avrdude
  • Using Windows and AVRstudio
  • Using Liniux and avrdude

Trying AVRdude on Windows

Before doing anything I had to install the AVR toolchain for windows 10.

I managed to set evertyhing up and tested it using Git Bash:

Then I used AVRdude to compile the firmware and upload it to the ATTiny85 of my PCB.

I plugged in the PCB with the ATMELICE AVR Programmer :

Before uploading the code, I had to compile the firmware to get the .hex file which will be used in the ATTiny.

make is the function to compile the files and get the .hex file to be upload in the microcontroller.

I changed the Makefile line PROGRAMMER ?= usbtiny into PROGRAMMER ?= atmelice_isp as that’s the controller I’m using.

make flash is the function to transfer the code. However it didn’t work.

The first problem was that the USB PROGRAMMER wasn’t recognized. I changed the programmer for an Polulu AVR USB PROGRAMMER. I changed the Makefile line PROGRAMMER ?= atmelice_isp to PROGRAMMER ?= avrispv2 .

A this point the make flash command didn’t work. We had to give more information to make it work. Finally I managed to make it work using the command avrdude -c avrispv2 -P com13 -p t85 -U flash:w:fts_firmware.hex

I uploaded the code without any error message. I was pleased.

The frustrated thing here is that you don’t have any feedback from the system to check if everything is fine.

I then plugged the PCB on my laptop but it wasn’t recognized. I plugged it to a lunix system. I run the lsusb command to check if I can see the PCB. I saw the Multiple Vendors USBtiny line so it seems that it worked.

I then tried the rstdisbl but it didn’t work. I changed the fuse one by one and it worked using the command avrdude -c avrispv2 -P com13 -p t85 -U lfuse:w:Oxe1:m -Uhfuse:w:0xdd:m -U efuse:w:0xff:m

Finally I used some drain to remove the connecter and make this PCB a programmer.

I was then ready to try my programmer.

Trying AVR studio on windows

I also tried to set the program to the ATTiny using the AVR Studio software.

I started to learn how to use the software AVR studio. The environnementof the software is more friendly and hte communication between the software and the programmer is simplified compared to avrdude.

I first opened a new project :

Then I specified the details of the programmer I’m using :

Then I uploaded a folder in the projects with the files

After changing the Make file ounce again, click on the Start without debugging button and it uploaded successfully.

We can even manage the fuses directly in the software.

My problem ounce again was that my PCB wasn’t recognized by any OS. I found that the USB 3.0 is an issue because the data transfer is to fast. The problem is that I just have one USB port and it’s a USB 3.0.

I have to find a solution to this problem.

Trying avrdude on Linux

I also tried to send the code usng Linux commands

I really wanted to make it work on my system so I installed a subsystem in my OS allowing me to work with Linux.

I first allowed my system to work with another OS by doing the following command on PowerShell :

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

I then installed Ubuntu to work in the Linux environnement in my system. Installing the toolchain became very easy :

I was however stucked at this point because because the change directory command didn’t work properly so I cannot go further.

I will install a dual boot OS with Linux on my system to simplify future developpement.

Using the PCB as a programmer

I tried to connect the PCB to an arduino ISP port to send any code to check if it works. From this point, my PCB wasn’t recognized by any OS (windows, Mac, Linux), so I soldered a new one and started all other again. I’m still stuck with this issue to this day.


After so many efforts I could’nt make it work properly (yet). I tried some solution to debug :

  • I checked using a multimeter all the paths
  • I checked using a multimeter all the value of the resistors
  • I checked that the I placed all the component correctly
  • I improved the USB connection

Yet something is wrong. I have to find out what’s the problem.

Improving the PCB

Improving the USB connector

I’ve solder a USB A male connector (directly or using wires) to prevent the PCB to slide or rotate while being in a usb port.

Increasing the pcb durability

To make the PCB more durable and more stable to the environnement, I wanted to put some epoxy resin on it.

I first made a mould using acrylic and the lasercutter. I planned to make it using epoxy but I first want to make sure everything is working fine before going through this process. Finally I didn’t do the resin poor because I stop trying to make this version of the FabISP and went for another one.

USB connection

5.3 Making it work

During the review of the week, I’ve noticed that many people had problems making the FabISP and it was somehow a mystery about why it’s not working.

One thing came out is that it worked better using an ATtiny45. I decided to start by following this way and made another FabISP using an ATTiny45.

Unfortunately I had the same communication issue with my laptop. It always was an Unknowned usb device.

I then decided to go for David’s design, to be more precise the hello.ISP.44.res version

I used the regular settings to make it using the lasercutter.

Making it I faced an issue. One side of the PCB didn’t cut. I used a knife to cut it, it wasn’t very clean but it worked.

PCB not cut
PCB cut using a knife

NOTE : I tried to use pliers to cut the board but it didn’t work well.

I then used silicon and alcohol to clean the PCB and I then solder all the components.

PCB cleaned
PCB Solder

Using the given firmware file and AVRdude, I programmed the FabISP :

I first changed the MakeFile to inform the programmer I’ll be using PROGRAMMER ?= avrispv2 then I run some commands :

  • make compiled the files and generated the HEX file
  • make flash flashed the HEX file in the microcontroller
  • make fuses adapted the fuses

Everything worked fine. I then removed the jumper and plugged the FabISP in my system. I installed the driver and this time it worked !

I now have a FabISP, I still have to check if I can program something with it.

EDIT : I cannot use my PCB as an ISP using AVR dude because, when I plug it to my computer, it’s recognized as an ISP but I’m not able to see the COM it’s connected to.

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.