IC BUFFER
Context
● You are developing an embedded application using one or more members of the 8051 family of microcontrollers.
● You are designing an appropriate hardware foundation for your application.
Problem
How do you safely control one or more small, low-power DC loads from a single microcontroller port?
Background
Suppose we try to control eight 10 mA LEDs from a single port using the techniques discussed in NAKED LED [page 110]. Figure 7.8 illustrates one way in which we might try to achieve this.
In almost all circumstances, this approach will fail. As discussed in NAKED LED , the various members of the 8051 family can typically sink or source around 10 mA of cur- rent per port pin. This figure does not, however, give the whole story. Take one family member as an example. The Atmel 89C52 is a modern ‘standard’ 8051 device (40 pins, 4 ports), which is used in various examples throughout this book. It can sink up to 10 mA per port pin. However, in total, P0 can sink only 26 mA (over all port pins) and P1, P2 and P3 can only each sink a total of 15 mA. Overall, at most, the whole chip can sink only 71 mA.
[Note: IN MOST CASES, UNLESS YOU USE LOW-CURRENT (~1 mA) LEDs, THIS WILL DESTROY THE PORT (and often the microcontroller too). ]
Although the various 8051 family members vary, these figures are representative of those found in many devices. As a result, circuits like that shown in Figure 7.8 – which require a total current flow of around 80 mA for typical LEDs – cannot generally be used.
Solution
As discussed in ‘Background’, buffers can be needed if we need to drive multiple low- power loads from one microcontroller. Even where the ports can drive loads directly, we can both reduce the risk of damage to the ports and safeguard the application as a whole by using an IC buffer between the microcomputer and the load.
We consider, first, some of the many ICs that may be used as buffers and, second, the need for pull-up resistors at the buffer outputs.
Finding an IC
Various ICs can be used as buffers in this way. Suitable inverters are readily and very cheaply available: six are packaged together, for example, in the ubiquitous 74×04 (Figure 7.9).
An alternative to the 74×04 is the inverting (74×240) and non-inverting (74×241) buffers that come in packages of eight (see Figures 7.10 and 7.11). These are particu- larly useful when buffering a whole port.
[Note: that each chip contains eight buffers, arranged in two groups of four (Group 1, Group 2). The buffers are all tri-state devices and, for use as a simple buffer, the gates must be enabled (in the case of Group 1) by applying a low (~0V) input to Gate 1 or (in the case of Group 2) Gate 2. ]
[Note: that, like the 240, each chip contains eight buffers, arranged in two groups of 4 (Group 1, Group 2). The buffers are all tri-state devices and, for use as a simple buffer, the gates must be enabled (in the case of Group 1) by applying a low (~0V) input to Gate 1, or (in the case of Group 2), by applying a high (~5V) input to Gate 2.]
Note that these buffers are all members of the ‘74’ series of ICs. All these 74x buffers can handle currents of 20 mA per pin. The total current per device is 70 mA in the case of the 240/241/244 devices and 50 mA for the 04. If your load satisfies the 20 mA per pin requirement but not the ‘per device’ requirement, you will need to use more than one buffer chip.
All these buffers operate reasonably rapidly, with a maximum delay of about 1 µs.
Logic families
The various ‘74’ series buffers just described are available in numerous versions, including ‘LS’ (the 74LS04 etc.), ‘ALS’, ‘HC’, HCT, VHCT, AHC, AHCT and so on. The different versions have different switching speeds, power consumption, operating voltages and prices. In general, you can choose any buffer that matches the needs of your project.
Despite the vast range of ‘74’ buffers available there are only two logic families: CMOS and TTL. The CMOS devices generally have a ‘C’ somewhere in the name (e.g. 74HC04) while the TTL devices generally have an ‘S’ somewhere in the name (e.g. 74ALS04). You need to be aware of the differences between these two families.
The original 5V TTL family dates from around 1964. It has undergone various improvements and is still widely used. Its main advantage is that it is fast; its main disadvantage is that it has comparatively high power consumption figures.
The main competitor to TTL is the CMOS family. The 5V CMOS dates back to around 1983 and it too has undergone various improvements. Its main advantage is low power consumption and – in recent devices – speed has been greatly improved. It seems likely that CMOS logic families will come to replace TTL logic over the next few years.
Any 8051 microcontroller can drive a buffer made from TTL or CMOS logic with- out difficulty. However, there are differences in the buffer outputs depending on the technology used; these differences are important:
● With (5V) TTL, the Logic 0 output is in the range 0 to 1.5V; the Logic 1 output is 3.5 to 5V.
● With (5V) CMOS, the Logic 0 output is ~0V; the Logic 1 output is ~5V.
These differences have significant implications. For example, consider that we wish to use a CMOS logic gate to buffer an LED output (Figure 7.12). This approach works very effectively, because of the large, fixed voltage swing; however, consider the same buffer implemented using a TTL buffer (Figure 7.13).
In Figure 7.13 we show that the TTL buffer has two disadvantages. First, we need a pull-up resistor (the usual 5K–10K value) to pull the ‘high’ output to 5V. Second, the ‘low’ output varies, in a range from 0 to 1.5V. This makes it very difficult to choose an appropriate value of resistor to ensure that we have a bright display and – at the same time – do not exceed the buffer or LED current capacity.
Use CMOS buffers
As these discussions suggest, it makes sense to use CMOS logic in your buffer designs wherever possible. You should also make it clear in the design documenta- tion that CMOS logic is to be used.
If working with boards designed by other people, the use of pull-up resistors at the buffer outputs can suggest that TTL logic was assumed; however, CMOS logic can still be used. If there is no pull-up resistor, then CMOS should be used.
Using pull-up resistors at the buffer inputs
As usual, if working with port pins that do not have internal pull-up resistors, you need to include such resistors (10K will do) at the input to the IC buffer, whatever kind of logic you are using.
See NAKED LED [page 110] for further details.
Hardware resource implications
Every implementation of this pattern uses at least one port pin.
Reliability and safety implications
A key design decision to be made when driving a small output device is whether or not to use a buffer.
In some circumstances, omitting the buffer can make your system potentially less safe. For example, if you have an LED accessible at the front of an embedded applica- tion, someone wishing to interfere with the system may try to apply a high voltage across this LED or to damage it physically. If the LED is connected directly to a port pin, then it may be possible to damage the microcontroller itself through damage to the LED: if there is a suitable buffer between the LED and the microcontroller, it is much less likely that any damage to the microcontroller will be possible.
Use of a buffer will increase production costs. However, if there is any possibility of the output device suffering damage while the product is in use, a buffer may be a good option: it is almost always cheaper to replace a blown buffer (~$0.10) than it is to replace a blown microcontroller (~$1.00+). As a result, for low-volume and / or high-cost products where repairs may be required, then buffers are a good solution.
Overall, if reliability is an issue, use a buffer. Otherwise, in very low-cost (or high- volume) products, or in situations where repair is not a practical proposition, then use of a buffer will simply add to production costs.
Portability
These techniques work with all 8051s (and most other microcontroller and micro- processor families).
As usual, if working with port pins that do not have internal pull-up resistors, you need to include such resistors (10K will do) in your design: see NAKED LED [page 110] for further details.
Overall strengths and weaknesses
IC buffers allow multiple (small) loads to be controlled from a single port. Buffers can improve reliability.
Use of buffers increases the product cost.
Related patterns and alternative solutions
The other patterns in this chapter (particularly IC DRIVER [page 134]) provide alternative solutions.
Example: Buffering three LEDs with a 74HC04
Figure 7.14 shows a 74HC04 buffering three LEDs. As discussed in ‘Solution’, we do not require pull-up resistors with the HC (CMOS) buffers.
In this case, we assume that these LEDs are to be driven at 15 mA each, which is within the capabilities (50 mA total) of the buffer.
The required resistor values are: