7. Electronics design

Group Project

To start this week, I looked at this site to learn about oscilloscopes. I also watched this video to learn about how to calibrate an oscilloscope.

I have used an oscilloscope briefly in my engineering class in semester one of this year. I have a short description of the process of making and using the oscilloscope on my digital portfolio. Aside from this, I was actually quite unsure of what an oscilloscope does.

In short, I learned that an oscilloscope measures voltage (Y axis on the display) in relation to time (X axis). To test out an oscilloscope and learn how to callibrate it, we uploaded a simple blink code to an Arduino, blinking the built in LED. We just used a 9V battery to power it. Here’s the setup:

A closeup of the controls:

Here’s the video of us going through the process of calibrating the oscilloscope:

In my engineering class, we soldered our own oscilloscopes. Using the same setup as we did previously, we measured the voltage coming from the Arduino with a blinking light with this other oscilloscope:

We didn’t know how to use the little oscilloscope that well since the manual was in Chinese. We just played around with it, not really knowing which buttons corresponded to each function.

Eagle

Fab lbr

I used the Eagle library provided by Neil called fab.lbr after downloading it from Gitlab. Then, I moved it to the libraries folder on my laptop. It showed up underneath Libraries in Eagle.

Then, I opened the Library Manager by right clicking on Libraries. Within the Library manager, I went to the available libraries and searched for eagle_fab.lbr. I clicked Use, and that enabled the library.

A before and after of the Add, where the first one doesn’t show the Fab library and the second one does:

Schematic

I made a new project, and within that, a schematic. I realized that I did not have a frame at all, so I tried to add one. I had to go back into the Library Manager and add the frame library before I was able to add an actual frame. Then, I added a 10K resistor. I placed it down within the frame.

Since this was a resistor, I gave it a value, which indicated that it was a 10K ohm resistor. In Eagle, you must click on the tool you want to use first before selecting the object you want to alter. Here, I clicked on Value and then the resistor that I had placed down.

I repeated this process of adding parts and adding values where necessary until I had all the components I needed.

Nets connect components, and there is a net tool on the left sidebar.

At first, I manually created connections between components. It was a long, confusing, and complex process that I eventually abandoned. I will describe the new method further down. I used the nets and physically connected which pins should be connected on each component. I added Junctions, or where two nets actually connect, where necessary.

Process of manually creating nets:

Final schematic:

When I was finished with my schematic, I Switched to Board and created this new brd file when prompted.

Board

When you switch to board, it just throws all of the components on. I separated the components so that I could actually tell the difference between them by using the move and rotate tools.

Instead of manually routing, I opted to use the Autoroute tool, which is also on the left side toolbar. Initially, the Bottom layer was set to Auto, like the Top. I changed that to N/A since I was using single-sided PCB. I also selected High so I could get the best autoroute possible.

At first, I was ecstatic because my autoroute worked on the first try.

However, I was quickly informed that it only worked because I had not set clearances. First, I changed trace width to 12. Then, I went to Edit > Design Rules > Clearance and changed everything to 16. Also underneath Edit, I changed Net Classes default to 16.

I removed my previous autoroute and reran autoroute several times, trying to get the optimal position and best autoroute. Even after a lot of playing around with orientation and location, I still had one air wire.

I tried to remedy the situation by adding a 0 ohm resistor (to jump over some traces), but I then realized that I didn’t have anything connecting the resistor and the routes that I had created. In the screenshot, it is R3.

So, I tried to go back to the schematic, and I got this error:

I ignored this error (which proved to be a huge mistake) and decided to go ahead and add zero resistors to the schematic (R3-R5):

I intended to use these and create nets so that they could jump over connections I could not avoid, but I kept getting the error as above and the R3, R4, and R5 did not show up on the board even when I pressed Switch to Board. I was informed that this error meant that communication between the board and schematic had been severed. Usually, when something is changed in the schematic, it also changes in the board (and vice versa). In my case, this communication was not occuring and that was what the error message meant. I tried to follow some tutorials online on how to reconnect the board and the schematic, but it just didn’t work out.

I went back and copied my schematic into a completely new file, added the zero ohm resistors, and created a new board. This time, I routed by hand so that I could exactly replicate what I had already created, except this time, I had the zero ohm resistor (R3). As shown in the picture, using a resistor to jump over two traces is not really possible. Mr. Rudolph assured me that it could be done; I would just have to manually cut the space between the resistor pad and that one trace with an X-Acto knife.

I put it into Bantam and milled it. I opened the saved .brd file that I had saved previously, and I was able to distinguish between the outline and the traces on Bantam. I could make one visible and hide the other one; this was especially useful since I milled the traces with a 1/64 bit and milled the outline with a 1/32 bit.

Cutting the trace:

By the time I had soldered and milled this board, I was having so many problems with it. When I used a multimeter to inspect if I had missoldered something, there were so many traces (maybe around 4) that were connected that should not have been. So, I restarted.

Restart: New Schematic

As described earlier, I employed a new method with my schematic the 8th (?) time around. Instead of actually connecting each pin to the next, I just named them and Eagle connected them. I first created little stems of nets coming off of each pin:

Then, I used the Name tool to give them proper names:

I continued with this process, and eventually, I started naming some nets the same name that I had named other pins. For example, I named a pin on the ATtiny GND and I also named a pin on the pin header GND. When I did this, Eagle prompted me:

In the process of making the schematic:

To create the yellow outline of the board, I used the existing yellow box and had it fit around my board. I also used the Miter tool to create indented edges around my shape, creating more than four sides on my board. Once I had selected the Miter tool, I simply clicked and dragged existing corners in toward the center to create a new side.

I followed the same steps as above to create a board, autoroute, and adjust until I had my final board. As shown, I incorporated a zero ohm resistor to jump over a trace. While creating this routed board, I discovered that I could have the zero ohm resistor connect anywhere on one type of named trace. For example, when the air wire indicated that I was supposed to connect the zero ohm resistor to the GND on the capacitor and the GND on the button, I could actually connect the zero ohm resistor to any trace that was labelled GND. It was really convenient.

Download my Eagle files .

My board in Bantam:

Download my Bantam file .

Soldering

Soldering has gotten easier over the weeks, but there were some parts that were still difficult for me. I struggled with soldering the button on, but I found that putting flux on the button really helped.

I did rip a trace on a pin header while I was using the desoldering braid. When I went to pull the desoldering braid away, I pulled the trace off with it, as well:

To prevent wastefulness, I removed the components that I had already soldered onto that board and used them in my next board:

I also really struggled soldering the crystal. I almost ripped a trace:

Process of soldering: (I also removed components from a separate failed board during this timelapse)

Final board:

Programming

Wiring

I labelled the Hello World board’s GND and the programmer’s GND so that I could quickly line up the boards when physically wiring. To do so, I made sure to check the original FabTinyISP tutorial for the location of the GND:

How I connected the boards:

Troubleshooting

When I uploaded Neil’s code, it would upload. However, when I went into the serial monitor, it would spit back gibberish when I tried to get it to echo:

At first, I thought I would need a driver after reading several Arduino/StackExchange forums where people cited their lack of a driver as their problem. However, lady ada’s tutorial page indicated that I did not need one since I’m using a Mac.

Then, Adam Harris realized that I had one pin header that was not connected to anything. I had a board that I milled but did not solder, and it was extremely clear that one of the pin headers did not connect to anything:

When I went back and looked at my schematic, I saw that I had accidentally labelled that pin header SCK and not SCI. I should have had a connection from this pin header to the SCK pin on the AtTiny 45:

To fix this, I just hacked the board by soldering on a wire:

Arduino

After hacking my board, everything went smoothly. I used Neil’s code on the FabAcademy page, and the echo worked.

Download the Arduino code

Takeaways

For this week as a whole, I learned how to:

  • Add libraries to Eagle
  • Create a more well organized schematic
  • Change settings (clearance, trace width, etc) for autorouting
  • Solder crystal resonators