2
\$\begingroup\$

I want to build a LED ROM (a diode-ROM, but using LEDs).

The LEDs will be driven from the outputs of a 74HC138 or similar. They will drop 1.6 - 1.7 V (red).

The ROM will have eight words of memory, each word being 12 bits wide (because that's what I need).

Each bit will be an LED socket. The presence of an LED indicates either a 0 or a 1 (depending on pull-up/down), and the absence indicates the opposite value.

When a word is accessed, the value's LEDs will light.

Is this feasible with 74HC levels and driving characteristics, without further components?

Should I pull-up or pull-down?

Enter image description here

or

Enter image description here

(If there is no difference, I will pull up, as that will light the accessed 1s, which seems more intuitive.)

\$\endgroup\$
9
  • 5
    \$\begingroup\$ You have LEDs with a forward voltage of 0.7V? Have you redefined the laws of physics? \$\endgroup\$ – Finbarr Feb 23 '18 at 12:55
  • \$\begingroup\$ Or maybe you have night vision? \$\endgroup\$ – Andy aka Feb 23 '18 at 13:00
  • \$\begingroup\$ Sorry, my mistake, red LEDs drop 1.6-7v, not 0.6-7v. \$\endgroup\$ – fadedbee Feb 23 '18 at 14:12
  • 2
    \$\begingroup\$ yes 3V swing is more than enough to decode logic. it's too bad you accepted an answer when another better one that works exists \$\endgroup\$ – Tony Stewart EE75 Feb 23 '18 at 14:44
  • 1
    \$\begingroup\$ Wht are your specs for variation in shared current and LED brightness? \$\endgroup\$ – Tony Stewart EE75 Feb 23 '18 at 16:47
4
\$\begingroup\$

This idea, though cute, will not work reliably as is.

The issue is LEDs have a typical forward voltage of 1.6V

With pull up that puts the low level output at 1.6V which is over the max Vil threshold for HC. So pull up is out.

With pull down the high level is 3.4V which will be above the max Vih, but is really close, especially when you subtract whatever you need to buffer the signals (See below). An additional transistor detector may be required here. See Spehro's Answer

Further, in order to get any decent light out of the LEDs the resistors will need to be small and the TTL will not be able to drive a full row of LEDs at once. You will likely need to add some sort of transistor to the decoder to push that much current.

All told, something like this may do it for you. LED present = 1 out.

schematic

simulate this circuit – Schematic created using CircuitLab

\$\endgroup\$
1
  • 1
    \$\begingroup\$ Upvote for mentioning lack of drive capability :) \$\endgroup\$ – Finbarr Feb 23 '18 at 13:16
4
\$\begingroup\$

A red LED will drop a couple of volts, so you'll likely need something else in there. Other colors require more voltage.

schematic

simulate this circuit – Schematic created using CircuitLab

The resistors R3 (and similar ones for the other LEDs) determine the LED current. One or more LEDs (up to more than 10) will turn the transistor on, which pulls the input to the inverter low, so the inverter output goes high when one or more of D1..D3 is lit.

An ordinary 74HC output with 5V Vcc can drive several LEDs with the shown series resistor with little drop (current is about 2-3mA each, which is plenty for a modern LED). If you want to drive more either reduce the LED current by increasing the resistors or use a more complex circuit like Trevor's answer (or add 20-30mA buffers to the output of the AND gates).

\$\endgroup\$
2
  • \$\begingroup\$ An explanation would be in order. E.g. why is a resistor in series for the base of Q1 not required and why these particular resistor values? What is the propagation delay compared to the logic gates used here? Can "not2" accept the slope rate when Q1 turns off/turns on? \$\endgroup\$ – Peter Mortensen Feb 23 '18 at 17:50
  • \$\begingroup\$ @PeterMortensen Added. A 74HC14 ST inverter could be used if you're concerned about keeping rise/fall times very short. \$\endgroup\$ – Spehro Pefhany Feb 23 '18 at 18:18
3
\$\begingroup\$

First off, using an LED will give a voltage drop of about 1.8V to 3V (depending on the LED type, or color). So as a result your output voltages might not reach a compatible high or low logic level.

To use a pull up or down resistor depends on if you want the LED to be on or off for an input of high or low, (your circuit with pull down resistors would give an LED on for a high output).

Your concept could only work if you made adjustments for the offset logic levels. One possibility would be to use an analog comparator on each output and set a unique logic level.

Try building or simulating the circuit and measure the actual output voltages.

\$\endgroup\$
1
\$\begingroup\$

Yes, this idea can work.

LED ROM working

I used ZVP3306A transistors (one for each byte, activated by 74AC138 address decoders) to switch the LEDs on at the high side. The current limiting resistors double as pull-down resistors. This way a 74ACT244 (notice the T, this is very important!) can sense, by the voltage drop across the resistor, if there is an LED placed or not. My version only reliably works with high efficiency red LEDs since they have a slightly lower forward voltage.

Surprisingly, using those fast transistors and AC/ACT parts, this worked somewhat well up to 10Mhz on a Z80. However, over time the connections tend to get bad, and you need to wiggle the LEDs. As soon as I figured out how to fit a machine code monitor into those 64 bytes, I copied it to battery backed RAM and never looked back, unless I had accidentally overwritten my code again, of course :P

Single-step debugging is fun this way, though.

Schematics and PCB design are on GitHub.

\$\endgroup\$
0
\$\begingroup\$

There are a couple of things we need to be careful of.

  1. The LEDs will have significant volt drop.
  2. We need enough current in the LEDs to see them.

To get around 1 we have the LEDs pull up and the resistors pull down. Then for the next stage of logic after the ROM we use HCT logic.

Regarding 2, apparently HCT logic can drive about 25 mA, so we get about 3 mA per LED for an 8-bit wide ROM. That should be enough to make them visible though not especially bright.

In summary, I think this is feasible.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.