I’m afraid I’m in a techno-dweeby mood at this moment in time. My head is filled with thoughts that are bouncing around my noggin like demented ping pong balls. Speaking of which, do you remember my 12×12 ping pong ball display?
If so, then—as you may recall—the last thing I did with this bodacious beauty was to implement a Lava Lamp Effect. This program employs something called Perlin noise (I based it on the examples that come with the FastLED library for the Arduino).
In my case, the result is very relaxing, similar in its effect on the observer to watching a crackling wood fire burning. In fact, it’s so calming and soothing that a counselor (psychotherapist) who has his office in the same building as mine wants me to build one for him because he says it would help to relax his patients (as opposed to the mallet he usually employs).
I’ve mentioned on previous occasions that I’m constantly amazed by the ingenuity of the ancients. In my Tempting Tidbits of Trivia blog, for example, I discussed how I was recently introduced to a 600-year-old water clock that involved a big bowl with a fountain in the middle surrounded by 12 stone lions marking the hours.
As I noted in that blog: “At 1 o’clock, water would start jetting out of the first lion’s mouth. At 2 o’clock the first lion would be joined by water jetting out of the second lion’s mouth. At 3 0’clock the first two lions would be joined by water jetting out of the third lion’s mouth. And so it would go, until midnight, at which point water would start jetting out of all the lions’ mouths for a while…. and then they would stop. And then the whole cycle would start again.”
I’m amazed by the elegance of the implementation to this problem—the fact that it involved no moving parts (apart from the water, of course) blows my mind. Of course, this reminds me of the one-way water valve that was invented by Nikola Tesla (see my blog Wowed by One-Way Tesla Valve). Before seeing the video in this blog, if you had come to me and asked me to make a one-way water valve with no moving parts, I would have said it was impossible. Now I just think it’s incredible.
Speaking of analog computing devices (we weren’t, but we are now), I think hand-operated mechanical calculators—like slide rules that can be used to evaluate mathematical operations such as multiplication, division, exponents, roots, logarithms, and trigonometric functions—are an awesome idea.
This reminds me of the book The Inventor’s Dilemma, which tells the story of the remarkable life of inventor, technologist, and business magnate H. Joseph Gerber. This is the guy who created the Gerber format that is the de facto standard used by PCB software to describe printed circuit board circuit board images: copper layers, solder mask, legend, drill data, etc. (I strongly recommend this book, which has pride of place on the shelves here in my office).
While studying for his bachelor’s degree in aeronautical engineering, Joseph invented a variable scale calculating mechanism. This all came about one evening because he was behind on a homework assignment. He was performing a task that required measuring, computing, and plotting countless curves. He conceived the concept of a flexible ruler that would provide the answers he sought without any measurements or calculations. He implemented the prototype using the elastic from his pajamas.
Joseph was worried that his professor might think he was cheating. However, when he explained what he had done, the professor recognized this contraption as being a revolutionary invention and urged Joseph to patent it as soon as possible (this variable scale instrument subsequently proved to be incredibly effective for a wide range of scientific and engineering tasks).
As I discussed in my blog The Analog Thing (THAT), there’s a brilliant video on YouTube from Veritasium on the topic of mechanical analog computers.
I’m extremely impressed by the part that shows how to implement a mechanical analog for the addition of ten sine waves. But the part that really blows me away is the breaking apart of a curve composed of multiple sine waves into its component frequencies. This requires the ability to multiply the composite curve by a sine wave and then take its integral. As I said in my blog: “All I can say is that the mechanical integrator is a thing of beauty that brought a tear of joy to my eye.”
The funny thing is that, while writing the preceding paragraph, I received an email from my chum Jay Dowling who pointed me at another awesome video on YouTube. This features the Ott Derivimeter, which is a mechanical instrument for finding the derivative of a curve drawn on paper.
Way back in the mists of time we used to call January 2023 (I cannot believe two years have already passed since then—I’m too young for all this excitement), I posted my article Mysteries of the Ancients: Binary Coded Decimal (BCD).
As I mentioned in that article, I’d just started a series of “Arduino Bootcamp” columns for Practical Electronics (PE), which is the UK’s premier electronics and computing hobbyist magazine. I love light-emitting diodes (LEDs) as much as the next dweeb (“Show me a flashing LED, and I’ll show you a man drooling,” as I’m wont to say). However, rather than perform a lot of simple experiments using individual LEDs, I opted to work with 7-segment displays.
The entire series took two years (24 monthly episodes). I only finished it last month (December 2024). We ended up with a 4-digit clock, with each digit being controlled by an 8-bit serial-in, parallel out (SIPO) shift register in the form of a 74xx595.
The final Arduino Bootcamp clock (Source: Max Maxfield)
Along the way, we experimented with a variety of techniques for implementing the clock with different numbers of displays. For example, we started with a single display whose segments were driven directly by the Arduino. We wanted to display time in the format HH:MM (2-digit hour and 2-digit minute) but—since we had only a single display—we presented this information as H… H… … … M… M… … … … … … H… H… … … M… M… etc. (where each “…” represents a unit of delay).
Next, we moved to using two displays and presenting the information as HH… MM… … … HH… MM… etc. Since we were still driving the displays directly from the Arduino, we had to multiplex them, which allowed us to introduce the concept of ghosting [in the context of our clock, the term “ghosting” refers to our trying to display two values too closely together on the same display, one for a longer time (the desired value) and one for shorter duration (the fainter, “ghost” value)].
From there we moved to multiplexing all four displays, which allowed us to present the time in the HH:MM format we know and love.
Our next step was to use BCD decoders to drive our displays. In this case, we started with 74xx48 non-latching devices. Then we moved to using CD4511 latching devices. And, finally, as noted earlier, we migrated to using 74xx595 shift registers.
As an aside, if you know of anyone who is interested in learning the Arduino, the publisher recently made the entire Arduino Bootcamp Collection of columns available for download for only £20.00 (which equates to $25 in the USA where I currently hang my hat), but we digress…
This is where we return to my point that I’m constantly amazed by the ingenuity of the ancients. It was when I was trying to wrap my brain around the 74xx48 data sheet that I had an epiphany (don’t worry, I soon recovered and it isn’t catching… or is it?). Consider the top-down view of this device’s dual in-line (DIL) package (or DIP for short) and truth table as illustrated below).
74xx48 package and truth table (Source: Max Maxfield)
Remember this is derived from the original data sheet, which hails from the early 1970s, so the L and H values correspond to 0s and 1s, respectively.
Now, without my explaining anything, using only this truth table, can you work out what this chip does and how it does it?
I have to say that this took me some time to wrap my brain around. I can’t replicate the overscore characters in this column, so you’ll just have to remember that the LT (“lamp test”), RBI (“ripple blanking input”), and BI/RBO (“blanking input”/“ripple blanking output”) signals are all active-low.
The reason the BI/RBO signal is presented between the inputs and outputs in this table is that it can act in both roles (it uses something called “wired-AND” logic, but let’s not dive down that rabbit hole here).
Now, I could explain all this in excruciating exhilarating detail, but I’m feeling generous… so I won’t (which reminds me of the old saying: “A gentleman is someone who can play the bagpipes… but doesn’t”).
The simplest way to understand the capabilities of this device is to suppose we want to display a decimal value like 42 on a 5-digit display, where each digit has its own 7448 BCD decoder. If we wish to display leading zeros in the form 0 0 0 4 2, then all we have to do is connect each device’s RBI input to logic 1 as illustrated below.
No blanking of leading zeros (Source: Max Maxfield)
We are showing only 5 digits here, but a real piece of equipment could easily have 10 digits or more. In addition to being aesthetically unpleasing, displaying leading zeros in this way degrades the user’s ability to quickly comprehend the value being presented.
Now, suppose we wish to blank any leading zeros such that a value of 42 on our 5-digit display will be presented as – – – 4 2 (where we are taking the ‘-‘ characters to represent blank displays). Using 74xxLS devices. We can achieve this by pulling the RBI input to the most-significant (left-most) BCD decoder to logic 0, after which the RBI inputs to any downstream decoders are fed from the RBO outputs from their upstream counterparts as illustrated below.
Automatic blanking of leading zeros (Source: Max Maxfield)
There are two things you might be thinking now. The first might be, “Max just said ‘…the RBI inputs to any downstream decoders are fed from the RBO outputs from their upstream counterparts…’ so, why is the RBI input to the least-significant (right-most) decoder connected to logic 1?”
That’s a very good question. I’m impressed. It shows you are paying attention. Well, suppose we want to display a value of 0. If we connected the RBO output from digit 1 to the RBI input of digit 0, then a value of 0 would be displayed as – – – – – (sad face). However, by tying the RBI input from digit 0 to logic 1, a value of 0 will be displayed as – – – – 0 (happy face).
Your second question might be along the lines of, “Why are we doing all this messing around to blank leading zeros using our BCD decoders when we could easily achieve this functionality using a microcontroller?” Well, this is a case of “the answer is in the question.” What we need to remember is that, back in the early 1970s when the 7448 was introduced, microcontrollers and microprocessors were only just starting to appear on the scene. Very few engineers were using these components in their designs. Most engineers were implementing systems using simple “jellybean” ICs (like 7400 series devices), in which case this capability would have been seen as a godsend.
The thing that really blows me away is that all this functionality was realized using less than 40 primitive functions as seen in the logic diagram provided in the data sheet and presented below.
The logic gates forming the 74LS48 (Source: Texas Instruments)
I tell you; I love this stuff. I could keep waffling about the wonders of the 74xx48 for yonks and yonks (and that’s a lot of yonks), and then I could bore your socks off by regaling you with fabulous factoids featuring the CD4511, but I fear I may have outstayed my welcome (I did warn you via the title to this column that “This One’s for the Techno-Dweebs,” so you’ve got only yourself to blame for reading it).
Having said this… on the off chance you’ve made it this far—which means I’m not alone (I’m envisaging myself sitting in an empty room muttering away to myself, which is certainly the way my wife “Gigi the Gorgeous” prefers things)—I’d love to hear your thoughts on anything you’ve read here.
I was able to answer your 7448 question, but only because I’ve designed with them before. Back in the early 1980s, I designed a device for sending numeric data along the phone lines using DTMF touch tone codes. I used 7448 decoders with FND500 seven segment LEDs. The original intent was for it to read the first “caller ID” tones, but the phone system in my area hadn’t been upgraded for that purpose yet. I think I still have it in a box around here somewhere.
If you root it out, I’d love to see a picture.