HexOut (1/3)

Posted: 6th November 2011 by Quinn Dunki in Hacks

A 16-bit hexadecimal display module.

 

I’ve been wanting to take on more advanced digital design projects. I also like making multi-purpose tools and modules. It occurred to me that having something that can display a human-readable value from a digital bus could be pretty handy. I call it HexOut, and it’s a simple little module that can be plugged into an 8-bit or 16-bit bus, and display the current value. It’s a very rough prototype, and if it proves useful, I may rebuild it cleaner and smaller.

Here's the final product, in action. Note that 1011111011101111 is the most delicious bit pattern. The construction of the entire unit is a little rough, for reasons I'll get into later.

 

As you can see, the module is a three-layer design. The architecture is broken down into three parts- input, output, and display. This article will cover the top layer (display). Subsequent articles will cover the Output and Input layers. Let’s get into it!

 

The Display layer is the simplest. It has four seven-segment displays wired in a specific pattern to a 32-pin header which connects to the layer below. Here’s the schematic:

Schematics don't get much simpler than this. The only reason to bother is so that we can generate a PCB using Eagle's tools.

Here’s the Eagle file for the schematic, if you’re interested.The Display was developed simultaneously with the Output layer, which will be covered in the next article. As usual, I started by mocking it up on the breadboard, to make sure it works.  If you look closely, you may notice my Bread Head and Juice Bridge projects are pitching in here.

I've only mocked up half the display here, since the circuit is really just two identical pieces chained together, each showing an 8-bit value.

Once I knew this general approach to displaying my data was going to work, it was time for the PCB:

The red traces all overlap in Eagle. They are only there to show me where to run top-side jumpers during assembly. I can simply click each pad with the Show tool, and it highlights the other pad that I should run that jumper to. This is great for reducing errors.

Here’s the Eagle file for the PCB. Like all my boards so far, it’s a simple one-layer design that relies on jumpers for the top layer. In this case, a lot of jumpers. It was a bit tedious to construct, but thanks to the jumper technique described above, everything was connected correctly on the first try. One interesting thing to note on this PCB is that the fill plane is actually Vcc. I’m using common-anode seven-segment displays, because it’s what I had on hand. It was much easier to lay out the PCB for these displays using a Vcc fill plane instead of the usual ground plane. The displays are ultimately driven by 74HC595 shift registers, which are better at sinking current than sourcing it, but they can still drive these displays just fine. However, it does mean the LEDs are effectively active-low, which means we need a low voltage to turn them on, and a high voltage to turn them off. That oddity is easy to correct for, as we’ll see later.

Something else to note on this PCB- there are no drill holes for standoffs in the corners, even though it’s part of a PCB stack. This was a mistake on my part, which I had to rectify with some creative rejiggering later. More on that after we go through all the boards.

Once I had the PCBs, it was off to etch. A little spoiler here- I actually designed and laid out all three PCBs at the same time, since that was much easier. For the purposes of these articles, however, we’ll just focus on one at a time. I etched the board using my usual process. The acetate for this layer is available here, and all the acetates together look like this:

Note that I print out two of each layer, and double them up for photo exposure. That will compensate for any flaws in the acetates or the printer's output. It costs the same to print anyway. The left-most column is the Display board, which we're looking at here.

Etch, my pretties, etch! This part is pretty darn satisfying.

Sidebar: I actually etched these boards twice. The first batch had a tiny under-scale introduced by the printer which I didn't catch until it was too late. I also had some issues with my etchant, which meant I had to leave them in much longer than usual. That resulted in the pitting you can see.

Here's the final Display board, all drilled and ready to go. It's very purty, except for one spot where the drill bit got away from me. I think that gives it character.

Here it is all assembled and ready for test. Why is it that everything you make out of seven-segment displays ends up looking like a bomb? What has Hollywood done to us?

Here's the underside of the assembled board. It's hard to see from this angle, but that 32-pin (2x16 row) header sticks down far enough to mate with the PCB that will sit below this one.

Here's another angle, just because I like to admire my handiwork. That was pretty darned tedious to wire up.

It's time to test it! Since the design is modular, it's easy to simply remove this portion of the circuit from the breadboard, and patch in the real thing. Since I know everything on the breadboard works, if there's anything wrong now, I know the problem lies in the Display layer itself. Everything worked first try, though, so we're in good shape. Notice again that the fill plane is Vcc on this layer, which is why I'm connecting power right to the edge of the board itself. Handy!

That wraps up part 1 of HexOut. In part 2, we’ll dig into the next layer down, which is where some real digital design starts to happen.

 

 

  1. Reg says:

    Very retro ;-)

    You might want to consider adding a buffer board w/ 2-4k of 16 bit wide SRAM, a counter and trigger logic to start and stop the counter. You could make that modular also by allowing for different trigger modules, e.g. single pin or start/stop when a particular word appears on the bus.

    Nice job.

    • blondihacks says:

      Cool ideas Reg, thanks! I’m sure there will be another version of it soon enough, once I’ve used it in the real world for a while. Stay tuned for the next two parts of this article!

  2. very cool project again! best part, no adrunios! i have needed to do a very similar thing once because they are nice and handy, also did one for input (keypad).

    nice work “ma’am”…or would you prefer “dudette”?

  3. Joe Hildreth says:

    Blondihack,

    Just wanted to say that I have enjoyed reading about your experience interfacing the 6502. As a matter of fact, I have enjoyed it so much that I this I want to follow along with you so to speak. I have bought a processor, sram, eeprom, crystal osc and stuff to get started.

    Anyway, I posted here because I have a circuit I want to share with you. I would like to make a hex display like you done, but I don’t have a ATmini. So I thought I would do it a little more old school. I am using a 4 to 16 line decoder with a diode matrix ROM to drive the display. I have bread boarded it with a two to four line decoder to prove the concept. If you email me, I will share the circuit with you and you can give me some input. I have not done any electronics in quite a few years, so a second pair of eyes would be good.

    Thanks for the inspiration.

    Joe