Posted on Sa 28 März 2009

15 digit 7 segment display

To show some stats of my home server I end up building a nice 7 segment display with following specs:

  • 15 digits (supporting all alphabet)
  • flicker free
  • doesn't require constant refreshing
  • must be cheap (I'm a student)
  • works with with the serial port
  • modular (simply connect many of them to expand the display)

7sd

Background

Looking on the internet about 7 segment display arrays I only found designs with a relative small number of digits (mostly 2 or 4). What didn't convinced me was the way they were controlled. They all shared the 8 bits data lines, and they were switched on and off one at the time. Done fast enough your eye should perceive the numbers well enough (persistence of vision)

That design has some drawbacks:

  • You need to constantly refresh the display
  • The duty cycle of each display is inversely proportional to the amount of components
  • The flickering became worst as the number of digit grows

For a big display the results should be very poor. I already find the flickering on my microwave very annoying only with 4 digits, so flickering it's a no go.

As in a lot of projects in college I'll work with Julian Perelli. He'll write the driver and I'll build the hardware.

Design

To solve 2 of the requirements at the same time we use shift registers. They act as a memory to hold the content of each digit preventing flickering and without requiring constant refresh.

The selected 8-Stage Shift register is the CD4094. They will be wired in series to form a cascade of 15digits x 8stages = 120 stages. Imagine it as a 120 bit array.

We can drive the array with 2 or 3 lines:

  • Data
  • Clock (on each cycle the stages will cascade once to the 'right')
  • Strobe (just to be fancy, prevents flickering when sending data)

To keep it cheap, we don't want to have extra components to decode the data coming from the serial port. Using the serial port in an unconventional way it's possible to drive the shift registers without extra logic.

The control lines can be setted/unsetted at will. It will only require a minimal voltage adaptation with some passive components. We use:

pinout

  • DTR (Data Terminal Ready) as Data (PIN 4 - DB9)
  • RTS (Request to Send) as Clock (PIN 7 - DB9)
  • TX (Data) as Strobe (PIN 3 - DB9)

For the display we use the Kingbright BA56-11. These are very inexpensive 3 digit modules.

display

Hardware

The connection of the shift registers is very straight forward and to keep it even simpler (and after reading the datasheets) I even didn't use any resistors between the outputs and the 7 segments.

pcb

As you can see there is a lot of wire that we have to route on the PCB. That is a very challenging operation (and it seems you can always do better). I got it down to the following:

pcb

There is only one trace you will have to do connect manually (on the left, green wire).

The components are placed mostly on the front side of the PCB

pcb

but I have to squeeze one CD4094 on the back with the DB-9 Connectors.

pcb

To produce the PCB the low cost toner transfer method (I may upload the process if someone is interested)

I won't lie. The manufacturing of this PCB is hard, but for me it was a lot of fun. It took me over 10 hours of printing, drilling and soldering, but I enjoyed every minute of it.

working

If you don't enjoy the process just send the layout to your favourite PCB manufacturer. To give you an idea of the complexity I got some stats of the board:

stats

To make the schematic and layout I've used Proteus from Labcenter Electronics.

DISCLAIMER: The PCB is pretty good, but not yet perfect. If you want to improve it I put the schematics and layouts in the Github repository.

Driver

Julian made an awesome program to drive the display. Basically it encodes a string in a way it can be represented by the 7 segments (see below) and then it sends the data to the display using the control lines of the serial port. He also implemented some nice features to display strings longer than the display itself with automatic rotation. Feel free to experiment with it.

Encoding digits is obvious but to encode letters we use the Harvey Twyman font.

font

The results are very readable most of the time, specially because the breain can 'guess' the 'not so obvious' letters using the context. Using smaller displays the results aren't so spectacular.

You can find the sources in Github. There is also a simple python script if you feel more comfortable.

To finish see it in action:

Author: Maximiliano Padulo

Category: hacks

© Maximiliano Padulo. Site built with Pelican. Theme forked from perec. Member of the Internet Defense League.