The time is finally here! After a short hiatus to work on the McCree Hammershot project, I’m back to building my time circuits. The display circuit boards have arrived and it’s time to get them assembled and running!
I ordered the display circuit boards on August 6th and it took exactly a month for them to arrive from China. Next time I think I’ll end up spending the extra cash for expedited shipping; “anywhere between 1-8 weeks” is a huge time frame, and for a solid two weeks the package was marked as “shipped” without any tracking information. But thankfully it arrived safe and sound and the PCBs look beautiful!
The black solder mask with ENIG coating looks great, and the silkscreen is nice and clean. A cursory test shows that all of the LED displays fit with plenty of clearance in the holes and butt up snugly next to each-other.
I’m really eager to start soldering, but there’s one thing to take care of first.
Finding the Other Components
Before I can solder everything together I need to find and purchase the rest of the electrical components. I have the LED matrix driver (HT16K33) and the LED displays, but I still need the resistors, capacitors, and other electrical parts. From the schematic, here are the parts I still need to source:
- Standalone LEDs
- Resistors (4)
- Capacitors (2)
- Board Connector
I did my due diligence to complete all of this research before I ordered the circuit boards, but as this post is otherwise going to be rather short it seemed like a fine place to list them out.
As I mentioned in the post on designing the circuit board, I’m going to be using SMD parts where I can to cut down on space and cost.
I still needed to decide on which standalone LEDs to use, however. I need four LEDs per display. The ‘red’ and ‘yellow’ displays use yellow LEDs, while the ‘green’ display uses green LEDs.
As 3 mm diameter LEDs (T1) are all basically the same size, there are three other factors to consider: wavelength, viewing angle, and brightness. For all three, I’m concerned more about the ‘art’ side of things and how everything looks together rather than matching the specifications perfectly. Here’s what I picked:
|Typ. Intensity (ucd)
|588 / Yellow
|568 / Green
I’m sticking with the Kingbright lineup because they are inexpensive, well documented, and should be consistent with the displays colors (for what it’s worth). Both LEDs have wide viewing angles and the same wavelengths as their display counterparts.
Unfortunately I couldn’t find standalone LEDs that match their rated brightness to the LED displays. It seems that standalone LEDs come in two varieties: bright and low current. There is no “medium brightness” variety, because you would typically use a resistor to lower the intensity of the light.
This isn’t a big issue, because I can do just that and use resistors to dim the LEDs as needed to match them to the displays. The resistor values are a shot in the dark at the moment because I haven’t decided what gels I’m going to use on top of the displays. From some testing with the gels I have on hand, I’ve decided to use 220 Ohm resistors for the yellow LEDs (both displays) and 470 Ohm resistors for the green LEDs. If I eventually decide the LEDs are too bright or too dim I can always do more tests and swap out the resistors. Speaking of…
The resistors should be easy. In addition to the LED resistors mentioned above, I need three 39K Ω resistors for the address selection on the HT16K33 chip, and I also want to add two 4.7K Ω resistors for the optional I2C pullups.
After some research, I’ve decided on the 0805 package as a good balance between size and my ability to hand solder. The resistors I chose have +/- 1% variation and a temperature range that should be far more than enough for this project. They can handle 1/8th of a Watt each, which should be plenty for their job. (This works for the LED resistors too, which see less than 1/8 W due to the duty cycle).
|Quantity (per display)
|Yellow LED Resistor
|4 (2 dsp.)
|Green LED Resistor
|4 (1 dsp.)
|I2C Pull-Up Resistor
The PCB will have two capacitors for the Ht16K33: a 0.1 µF bypass capacitor for passing high frequency noise to ground and a 10 µF capacitor for helping with transient current spikes. I’m not an electrical engineer, so the second capacitor is a precaution more than anything else.
I’m using class 2 ceramic capacitors for both of these because of their frequency response, although they’re also more rugged and have longer lifespans than electrolytic or tantalum capacitors.
Once again, I found both capacitors in an 0805 SMD package at DigiKey for less than $0.15 each. The small cap is X7R (-55 / 125°C) while the large cap is X5R (-55 / 85°C). Each has a +/- 10% rating tolerance and a +/- 15% rating change over the temperature range.
|Quantity (per display)
The address-setting jumpers require a diode to connect to the ‘COM’ pin on the HT16K33. The datasheet does not elaborate on what type of diode is needed, so I’m going to follow Adafruit’s lead and use a 1N4148 diode.
According to Wikipedia, the 1N4148 diode is “the most common mass-produced switching diode”. The article says it is so popular and long-lived “because of its dependable specifications and low cost”. Sounds good to me.
I’m not well versed on diode specifications, but the address setting function for the HT16K33 should be nowhere near the diode’s limits. I decided on a SOD-323 package, which is compact but should be large enough to solder by hand.
|Reverse Voltage Limit
|Reverse Recovery Time
|Quantity (per display)
|SMC Diode Solutions
|1 V @ 10 mA
This was the trickiest part to find because it’s so open-ended. The other components are rather narrowly defined by the electrical design, but any connector will work so long as it makes a solid connection with four pins.
To narrow things down, I decided to aim for a connector with a common pitch (0.1″ or 2.5/2.54 mm) and a positive locking feature, as I won’t be able to access the circuit board once the faceplate is on. A rectangular connector made the most sense given the form factor of the PCB, and it should come straight out from the board because of the direction of the cabling. The connector should have cable and board connections and not require a specialized crimping tool. A single row with four pins would make the most sense for the board spacing. The connector only needs to carry ~250 mA of power plus the I2C lines, and isn’t going to see extreme environmental wear or frequent plugging/unplugging.
I decided to go with a connector from JST’s EH series. It has a 2.5 mm pitch, supports up to 3 amps, and is small enough to fit easily in the enclosure and not look horribly out of proportion.
|Quantity (per display)
In the unlikely case that these connectors end up not working out, the 2.5 mm pitch footprint on the circuit board is common and will still be good for dozens of other connector types. It’s also close enough to 0.1″ that most 0.1″ pitch 4-pin connectors should fit in the PCB’s footprint without bending their pins.
As the links above probably indicate, I ordered most of the parts from DigiKey. Since DigiKey doesn’t carry the LED standoffs I wanted, I ordered those from Mouser and did price comparisons on everything. For most things they came out about the same, but the LEDs were significantly cheaper from Mouser.
In typical DigiKey / Mouser style my orders arrived very quickly and well organized. Time to get to soldering!
The SMD parts went on first, starting with the HT16K33. This was my first time ever soldering SMD parts and my first time using ‘drag soldering’, so I was in for a treat. Everything is going to be soldered by hand using 60/40 – I can try reflow soldering for my next project.
I started by cleaning the HT16K33 pads with a flux pen and then carefully moving the chip in place with a set of tweezers. I then tacked down opposite corners using a bit of solder and applied some more flux to the pins + pads. After applying a fair bit of solder to the iron’s tip, I dragged it somewhat slowly across the pins. The solder bridged the connections and the chip was fully attached. I had to go back and tap one or two pins to make sure the solder was flowed evenly, but otherwise for my first attempt at drag soldering it went pretty well.
No photos for this – the connections may be solid, but the flux residue makes it look nasty up close! I did what I could with a bit of rubbing alcohol, but maybe I should use a no-clean flux next time.
With the multiplexing chip on the board, the next parts to be added were the capacitors. The 0.1 µF cap goes closest to the chip, followed by the 10 µF capacitor next to it. For both I added a small dab of solder to one pad, held the capacitor in place (those tweezers are a lifesaver), and then reflowed the solder with my iron to connect the two. I then soldered the component to the other pad and it was done.
After the capacitors I soldered the diode. This is the one part where I wish I had bumped up the size a bit – it’s the same rough dimensions as an 0805 resistor, but the leads are that much smaller. I was worried I was putting too much heat into it with those tiny leads, but it seems to have turned out alright. At least I had the sense to make the pads large enough to work with.
On the first board I soldered I actually delaminated one of the pads after I realized I had accidentally placed the diode backwards. A little bit of wire saved it, but I was very careful with soldering the diodes from them on.
The last SMD components to be added were the resistors. I started with the address resistors, then went to the I2C pull-ups, and finished up with the LED resistors. These were all added using the same process as the capacitors: add solder to one pad, reflow the part to the first pad, and then solder the second. Once I had the process down these went very quickly.
I was surprised with how easy it was to solder these SMD parts. Once you get into a mindset for working with small parts it’s actually quite simple. Easier than constantly flipping over a board to solder through-hole parts, for sure. I’ll definitely be looking towards SMD parts for more projects in the future.
With all of the SMD parts on the board, the only thing missing are the LEDs! But before wasting a whole batch of LEDs, I wanted to check that the board was going to work as-designed.
I soldered on the 4-pin connector to the board and then got to work setting up my test connections. I had ordered a bunch of hook grabbers and mini test points, with the intention of connecting the newly-soldered PCB to my original breadboard setup in place of the HT16K33 breakout.
After soldering wires to each hook I set test points at each ROW pin and COM pin on the PCB – 24 points in total. I then connected the hooks and ran wires to the respective points on the breadboard. I hooked up an Arduino Nano with a test sketch to the I2C connector and checked whether everything was working properly.
The result was… not great. Most of the LED segments/ displays lit up, but a few required jiggling the wires to get them to light. Either a test point was pulled off, or a breadboard wire was loose – and attempting to navigate the setup to fix it just caused more issues.
This was a massive pain to set up, and because of how messy it was it was difficult to tell whether an LED wasn’t lighting up because of a hardware problem on the PCB or a loose connection.
I eventually gave up trying to test like this – for subsequent boards, I just tested a single LED to see if it would blink. That told me that the HT16K33 was working properly and nothing critical was shorting. But this large-scale test did tell me that the board was more-or-less working as designed – so it was time to add the LEDs!
Although I originally planned to make my first set of displays with “stand-in” LEDs while I waited for the “proper” LEDs from Kingbright, the correct LEDs arrived from backorder in only 19 days! My first fully-soldered display is going to be done using these “stand-in” displays just so I get a feel for the process, and then I’m diving right in with the final displays.
The 7-segment displays were put into their respective lasercut standoffs and inserted into the circuit boards, followed by the 16-segment displays. For the first board I simply flipped it over and soldered everything straight across. The displays have a tiny bit of wiggle-room inside of their holes, so they can get a little mis-aligned. This isn’t terrible, but it’s noticeable if you’re looking at the displays closely.
The next three boards I soldered were the ones I’m hoping to use in the final prop, and I adopted a slightly different strategy. After inserting a display I tacked it in place by soldering only one pin towards the center of the part. This allowed me to reflow the solder on that pin, readjust the display’s positioning, and make sure everything was closely aligned before I fully soldered the rest of the pins.
Even with the standoffs, the alphanumeric displays are at a very slightly different height than the 7-segment displays (~0.002 – 0.005″). This isn’t noticeable at viewing distance, but it means that the parts won’t stay perfectly flat when soldering. Because of this, I started by soldering all of the 7-segment displays fully and then adding the 16-segment displays.
Because they stick up higher than all of the displays, the standalone LEDs were the last to be added. These include the 0.25″ standoffs that keep them at the right height for the display casing. I soldered one lead, reflowed the solder to pull the LED flush with the board, and then soldered the other. Once I was satisfied with the position I clipped off the excess from the standalone LED leads.
Tying It All Together
With the LEDs in place the display circuit boards are complete! I soldered the address jumpers for each display (A0, A1, A2 from top to bottom) and put the iron away. The last step is to wire the connectors and test them out.
I assembled the connectors using some generic 22 AWG stranded wire and the proper crimped connector. I used another Arduino Nano with a test sketch of my driver code to check that the displays were working properly. First it sets all of the segments on, then off, then sets them to the values from the first time Marty sees them (after Einstein goes through time). From then on the ‘present’ (green) display counts forward and the ‘seconds’ LEDs for all three displays blink in time according to the Arduino’s internal clock. It’s quite a sight.
The display circuits are assembled! This is a huge milestone for the project. There’s a lot more to be done, but these are the most visible and most iconic part of the prop. And so far they are built and working exactly as designed.
Next up: Modifying the display cases