As the title suggests, this post is all about the creation of a multipurpose display board, powered by an mbed. The display board has exposes many of the GPIO functions of mbed and so can be used for all kinds of projects like timers, counters, clocks and so on.
However, as the design also includes an Ethernet socket, the data being displayed could be coming from anywhere on an intranet, or from the internet. This means projects like, web hit counters, calls answered counter, the current FTSE100 index, live sales data, and so on.
Having multipurpose in mind, the design (both at the schematic and PCB level) must be as generalized as possible. That is translated to many easy available IO lines for the user, multiple mounting options, no special power needs, common communication protocols etc.
An abstract block diagram of that system can be found in the figure below.
The left part of the diagram is simple to implement as both the parts and the code is already available in different shapes and functionality. The only consideration at this point is the display method.
The main display components that we can use are the following:
- LCD Displays
- Seven Segment Displays
- Dot Matrix Displays
The first one can eliminate easily, basically because of two reasons. First, it is a costly component (at least compared to the other ones) and second because of the lower visibility from distances, in different angles and light conditions. Those are the reasons that they don’t use LCDs at the big advertisement displays at the roads or squares (like the Time Square).
The second and third choice was a difficult one. Both of those are based on the exact same technology, they just shaped differently. The price is almost the same and the driving method is common as well. But the final decision was based at the complexity of the software. It is really easy to implement a code for segment displays but it needs more time for good results having dot matrix displays.
Having made the final decision about the desired display method, it is time to work out the drive architecture of those. Again we have different choices available but two of those are the standard ones, with all the other ones based in combinations or slight different version of the main ones.
Choosing the interface of the displays
One possible way to interface with multiple seven segment displays is the multiplexing method. This method means all the “a” segments of the displays are connected together (as well as “b”s and “c”s), while the common anode or cathode (depending on the power ON method) will driven from the microcontroller by using a switch component (like a BJT, FET, etc, in order to handle the current) to enable the 7 segment display. (Figure 2).
The main gain of this method is the pin count. We can connect as many displays as we want (I am not considering loading and timing problems) and the number of pins (Σ) will always be Σ = 8+N, where N equals to the number of displays that we want to use and the constant 8 is the number of segments including the dot point.
But this method comes with a negative and it is located at the software side. The only possible way to have different numbers at the displays is to activate the first one, then to indicate the number and then deactivated again in order to run the same process for all the remaining displays (with a high refresh rate <20mS). Of course, after the sequence finish we must start again!
This can easily implement at the software side (with a timer interrupt, ticker) but uses valuable resources for the other microcontroller tasks. A solution that will solve this and will even give us more available pins is an external driver.
You can find those drivers in many different package shapes, with different communication protocols, internal functionality or even different drive capabilities. On top of that the cost is really small as all of the mainstream manufactures have at least one LED Driver family series in their portfolio.
After a parametric search at the RS web site, I decide that the best candidate is the PCA9635 from NXP (RS Part No: 510-897). The price is slightly more expensive compared to other available drivers but the internal functionality will gave us the advantage. A few of the driver’s features are:
- I2C Communication method
- 16 LEDs outputs
- 7bit wide peripheral address
- 8bit PWM resolution for every LED output
- 20mA Current sink capabilities per output
- External output enable (OE) input
- Grouping methods for simultaneous control of different LEDs
And now, using the I2C protocol and the PCA9635 driver the system architecture will transform to the one presented at the diagram below (Figure 3).
Connecting the driver
The PCA9635 driver (Figure 4) is a really simple integrated circuit both internally and externally. It needs only one external component (a 100nF ceramic decoupling capacitor) to its single Vdd pin to operate. The clocking circuit is internal, eliminating the need of external clock source components. These can increase the cost of the board and need special treatment for the PCB designer.
All the other pins are directly connected to the microcontroller (the I2C pins) or to ground / power in order to set the peripheral address of the devise (yellow colour). The only exceptions to this direct connection are the LED output pins. Those pins are driving the segments of the displays and they have a series resistor for current / voltage control at the LEDs.
It is worth to mention that you cannot use the same value series resistors for all the pins of the seven segment display. In general the segments have twice as many internal LEDs compared to the dot point. This is not always true for all the displays and you should look at the specific datasheet for more information about the proper current and voltage for normal operation.
The complete board
Having all the datasheets and the drawing notes it was time to create the libraries, schematic and the PCB of the multipurpose display board. As now I am familiarized with the tool chain and sequences of the Design Spark PCB the process was easy and it took less than few hours from the libraries to the gerber files.
At the top layer we have only through hole components and at the bottom the SMDs (drivers and passive peripheral components). The population process is easy and will take less than an hour even for a non experienced user. At the picture below (Figure 5) there is an unpopulated PCB and the final result after population.
Having the first prototype build and tested, it was time to note all the bits and pieces that create problems and fix them in the revision 2. Those problems are:
- Reposition of some input components for better handling from the user
- Adding of a voltage regulator
- Silkscreen improvements and corrections
- Remove the hack-saw indication line
As for the first one, I placed the two tactile push buttons and the potentiometer at the middle of the mbed connector and the IO terminals. It seems that this placement it is not the ideal one and both of those component must come closer to the IO terminal, leaving more space for the users fingers.
The voltage regulator is a must feature for the revision 2 of the board and that’s because the mbed’s onboard regulator is getting really hot because of the 8.7V of dropout voltage. Of course the regulator can handle this voltage and the heat as well, but it is not the best design technique. The new regulator is an SMD one (RS Part No: 688-9240) placed at the bottom of the board (Figure 6) together with an attention signal indicator of hot surfaces. The ground plane on the bottom of the PCB acts as a heat sink, safely dissipating the heat from the regulator.
Except for the little indication signal for the regulator, the silkscreen layer is also redesigned. I’ve added some information for the I2C addresses together with the named connections of the IOs. The font and size is also altered compared to the original board giving a more professional look even to an experienced eye (Figure 7).
Finally the hack-saw line (or cut line, Figure 8) is now removed. The story of this line starts just before the manufacture of the first revision. I was not 100% percent sure if everything are going to work perfectly so I rearrange the trace routes at both layers, cut the bottom and top cooper pour in two different section (help to prevent short circuits if you cut the PCB) and use this line as an indication for the hack saw. So, if the display driver section failed then at least we can cut the board and use one part of it as a general purpose PCB!
The dimensions of the original (Revision 1) and the new version (Revision 2) of the mbed Multipurpose Display Board are the same (380x82x17mm) and it is powered from an external 12V wall power supply. The input current depends from the segments that are turned ON and it starts from 160mA (with just one segment turned ON) to almost 950mA.
For the final next post the PCA9635 library creation and API of the Display Board...
8 commentsLike this Leave a comment