Making the DHD

This new version DHD PCB can function all on its own without the need for the extra keyboard PCB. It connects to the raspberry pi with a regular micro-USB cable. The DHD PCB is recognized by the raspberry pi as an ItsyBitsy 32u4 – 5V 16MHz and can be programmed like an Arduino. If you are looking for the first version, you can still see the information on this page.

Jonathan Moyes lent me his expertise with PCB design. All the PCB, schematics, hardware, firmware etc. came from his brilliance. I have tried to make this page as step-by-step guide for others to make their own DHD PCBs from Jonathan’s designs.

You can see the schematic for the PCB here.

What hardware do we need?

First one needs to order the PCB and a stencil from a PCB manufacturer. I used JLCPCB.com. Upload the DHD_v2_RC1_GERBERS.zip file in the ordering page at JLCPCB and order with the following settings:

PCB

  • Layers: 2
  • Dimensions: 100x100mm
  • Different Design: 1
  • Delivery Format: Panel by JLCPCB
  • Panel Format: 1×1
  • Edge Rails: On 4 sides
  • PCB Thickness: 1.6mm
  • PCB Color: Green
  • Surface Finish: Lead-free HASL-RoHS
  • Copper Weight: 1oz
  • Gold Fingers: No
  • Confirm Production file: Yes
  • Flying Probe Test: Fully test
  • Castellated Holes: No
  • Remove Order Number: Yes

Stencil

Stencil
Stencil
  • Framework: No
  • Dimensions: 380x280mm
  • Customized size: No
  • Stencil Side: Top
  • Stencil qty: 1
  • Electropolishing: yes
  • Fiducials: None

Bare PCB
The bare PCB without any parts. Top side to the left and bottom side to the right.

There are a lot of tiny, (very tiny!) SMD components that needs to be soldered to the PCB using a reflow method. (I used an electric skillet). The microchip also has a lot of very small solder pads. To apply the solder-paste to those pads we need a good stencil.

In addition to the bare PCB and stencil we also need a lot of resistors, an atmega32u4 microchip, the LEDs, and a few other parts. I ordered all the SMD parts on digikey.com except the LEDs which I ordered from Sparkfun.com. Jonathan created this handy CSV file which serves as a bill of materials showing all the parts to be soldered on the DHD PCB. The BOM file is also included in the archive together with a .xlsx version. Take special notice to the Reference Designators column and be sure to solder the correct part to the correct place on the PCB. You need to solder the Microchip and LEDs with the correct orientation. There are small white dots on the PCB that indicates the orientation of the parts. We will also need some solder paste. I used SMD291AX50T3, and I think Jonathan prefers Kester Solder 70-4021-1410.

The microchip comes with some default settings we need to change. We can set up the chip using an Arduino. I used the ItsyBitsy 32u4 5V 16MHZ. It makes sense since that’s the board we are mimicking.

That should be it for the needed hardware components. Now let us look into the soldering of the PCB.

Soldering

First things first: make sure there is not a power-ground short on each PCB before assembling them. Just take your multimeter, set it to resistance/Ohm mode, and touch the probes together to ensure you get a reading very close to 0 Ohms, to prove that the meter is working. Then touch the probes to the GND and VCC pads on the back of the board. You are hoping to see OL/Open Line (infinite resistance). You will repeat this test after assembly and before powering it up, but after assembly we expect to see something in the high K to low M-ohm resistance. If we see very small resistance, there’s a chance there is a power-ground short on the board and plugging it in would let out the magic blue smoke that makes electronics work.

Let us go over the materials/tools you will need:

  • The bare PCB and the parts from the BOM file.
  • The stencil to help with solder paste application.
  • Packing tape, to hold the stencil in place.
  • Isopropyl Alcohol, to clean the solder paste from the stencil and tools.
  • A flat surface that you can tape PCBs down to. It should be a bit larger than your stencil, and at a comfortable working height.
  • Some other PCBs of the same thickness as the board you are assembling. We will use these to make a frame to align the board and stencil.
  • Solder Paste. The best is Lead-Free/RoHS, No Clean paste.
  • Electric skillet, to use as a reflow oven. To melt the solder paste and do the actual soldering.
  • Nice tweezers for placing components.
  • 6″ Steel putty knife – we will use this as a squeegee to screen the solder paste on the board. You really want to do the whole width in one pass, hence the 6″.
  • Plastic putty knife to work the material out of the jar, get it lined up on the 6″ knife, and to help knead the paste before application.
  • Pliers to break the board out of the frame.

This is the soldering process that worked well for me:

  • Build your stenciling frame.
  • Line up and tape down the stencil.
  • Prepare the putty knife w/ paste.
  • Screen the paste.
  • Post-print inspection.
PCB skillet cooking
organized parts
  • Place the parts on the PCB. (Except the buttons and the USB connector. The USB connector will be soldered to the back of the board with a regular soldering iron). To make placing the parts easier I recommend sorting them beforehand and keeping track on what components to place where. I lined them up on a piece of paper where I wrote down what components to put where. I taped the paper to the table to avoid shuffling it around and accidentally mixing the parts.
  • Reflow. Carefully place the board in the electric skillet and crank the heat. Keep watching to see when the solder melts and the magic happen. (see video below). Make sure the parts are soldered on the entire board before powering it off and letting it cool down again. There is a nice article about reflow soldering using an electric skillet at SparkFun here.
  • Post-solder inspection. Check that all soldering points looks shiny and appropriate. Check for bridging or soldering errors around the microchip.
  • Pre-smoke test using the multimeter as mentioned above.
Back wires
USB connector soldering
  • Solder the USB connector to the back of the board using a soldering iron. The USB cable should connect to the board from the underside. To make the board fit nicely in the DHD model you need to make sure it is not soldered at an angle. It needs to be lined up correctly.
  • Solder on 6 wires to the pads on the back of the board. These are just temporary and will be removed again later. They are used to connect the DHD PCB to the ItsyBitsy to set up the microchip.

This video shows the soldering and assembly process

A brief video that shows the soldering process. It is rather satisfying to watch the reflow process in the skillet.

That is it for the soldering. Now it is time to configure the microchip and upload the Arduino program to our newly created DHD PCB board.

Programming the DHD PCB

ItsyBitsy

First, we need to configure the atmega32u4 microchip on the DHD PCB so that whatever computer we connect it to will recognize it as an ItsyBitsy 16MHz, 5v. We will do this using an actual ItsyBitsy 16MHz, 5v.

  • Take out the ItsyBitsy 16MHz, 5v and solder on the header pins if you have not done it already.
  • Install the Arduino IDE on your computer. Here is a guide that shows how this is done in Windows.
  • Configure the Arduino IDE to work with the ItsyBitsy as seen in this guide.

We need to upload a specific sketch, the ArduinoISP, to the ItsyBitsy to use it to change the settings on our own microchip:

Arduino Upload
arduinoISP
Arduino tools menu
  • Connect the ItsyBitsy to your computer and fire up the Arduino IDE
  • Make sure you have selected the right board and port in the tools menu. (Your port may differ from mine of course)
  • Open the ArduinoISP sketch.
  • Upload the sketch to the ItsyBitsy.

Our microchip programmer device is now ready, and we can use it to program the Arduino bootloader on the DHD PCB. I prefer doing this on a raspberry pi. I had issues using avrdude on my windows computer, but It worked brilliantly on the pi.

Boot up the raspberry pi and install avrdude and download the Caterina_itsybitsy5V.hex file. :

sudo apt-get install avrdude
wget https://cdn-learn.adafruit.com/assets/assets/000/049/815/original/Caterina_itsybitsy5V.hex

Connect the 6 wires soldered to the back of the DHD PCB to the ItsyBitsy on the following pins:

Arduino -> DHD Board
5V      -> 5V
GND     -> GND
10      -> RST
MOSI    -> SDO
MISO    -> SDI
SCK     -> SCL

Connect the ItsyBitsy with a micro-USB cable to the raspberry pi.

DHD PCB ItsyBitsy and raspberry pi

Run the following commands in order on the raspberry pi. You might need to check what port is used to reach the ItsyBitsy. Most likely it’s /dev/ttyACM0 or /dev/tty/ACM1. If not, you can try /dev/serial/by-id/usb-Adafruit_ItsyBitsy_32u4_5V_16MHz-if00
The first command erases the chip and is necessary in order to run the three next commands.

avrdude -P /dev/ttyACM0 -b2400 -cavrisp -pm32u4 -B 2 -e
avrdude -P /dev/ttyACM0 -b9600 -cavrisp -pm32u4 -U lfuse:w:0xff:m -B 25
avrdude -P /dev/ttyACM0 -b9600 -cavrisp -pm32u4 -U hfuse:w:0xd8:m -B 25
avrdude -P /dev/ttyACM0 -b9600 -cavrisp -pm32u4 -U efuse:w:0xcb:m -B 25
avrdude -P /dev/ttyACM0 -b9600 -cavrisp -pm32u4 -U flash:w:Caterina_itsybitsy5V.hex

After running the lfuse, hfuse and efuse commands you should get output in avrdude similar to this: Make sure the line marked with red has the correct Fuses OK (E:CB, H:D8, L:FF)

pi@stargate:/dev/serial/by-id $ avrdude -P /dev/ttyACM0 -b9600 -cavrisp -pm32u4 -U efuse:w:0xcb:m -B 25

avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9587 (probably m32u4)
avrdude: reading input file "0xcb"
avrdude: writing efuse (1 bytes):
Writing | ################################################## | 100% 0.01s
avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xcb:
avrdude: load data efuse data from input file 0xcb:
avrdude: input file 0xcb contains 1 bytes
avrdude: reading on-chip efuse data:
Reading | ################################################## | 100% 0.00s
avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: safemode: Fuses OK (E:CB, H:D8, L:FF)
avrdude done.  Thank you.

To verify we can disconnect the ItsyBitsy from the pi and the DHD PCB. Connect the DHD PCB with the USB cable to the raspberry pi. It should show up as an itsy bitsy. Check the /dev/serial/by-id folder. There should now be a file named usb-Adafruit_In_Adafruit_ItsyBit-if00.

Arduino Upload DHD PCB

It’s time to upload the firmware to our DHD PCB. Connect the DHD PCB with the USB cable to wherever you have your Arduino IDE. First make sure the following libraries are installed. If they are missing, you need to install them using Tools -> Manage Libraries.

  • Arduino Keyboard
  • CmdMessenger
  • Adafruit’s DotStar Library

Make sure you have selected the right port and board in the tools menu and upload the DHD_Keyboard.ino to the DHD PCB.

Notepad, keys

Let us test the keyboard functionality first. Disconnect the board and add a button or two. (or all of them). Open notepad or any similar program. Connect the DHD PCB with the micro-USB cable and hit the button(s). Letters should appear in notepad.

bashrc

We can fully test the DHD PCB by running the included dhd_test.py script. If you have not done so already you first need to set up the python virtual environment and install the required modules. You can see step by step instructions on how to do this here. Make sure that the dhd_test.py script is the only custom active script in the .bashrc file and restart the raspberry pi. When it boots up it should first run through all the LEDs before you can toggle the LEDs with the keys. This video below shows the result of running dhd_test.py

If everything worked, it is time to remove the temporary wires (solder them off) and break it out of the frame if you have not done it already. It should fit nicely into the printed 3D model:

The DHD buttons

DHD buttons
DHD buttons light

In the TV Show the DHD buttons light up when pressed. This means using “transparent” plastic for the main part of the button. And a “cover” on top that does not let the light through. When held up against the light coming from the window, it looks like this.


Below are a few pictures of the fully assembled DHD and a video of the dialing process.

The Stargate will not do much without a valid address to dial, so I made this tablet with a few Stargate addresses. I based the design on a goa’uld tablet from the TV show.

Hopefully you liked how I made the DHD using a custom PCB. If you haven’t checked it out already, I encourage you to also take a look at how I made the Stargate itself.

If you have any comments or questions, feel free to use the comments section here. Or, you can send me an email at kristian@thestargateproject.com