Common Anode 7-segment Display on External Device

Software guy looking for hardware assistance; help me @Grumpy_Mike, you’re my only hope…lol

I have an Arduino UNO I’m trying to hook up to an existing circuit. The circuit has a LITE-ON LTD-6610E common anode 2-digit 7-segment LED display from which I want to read the values. That’s what I’m “really trying to do”: successfully read the values off the display (or from further back in the circuit if needed, but I’m getting ahead of myself). The display has 18 pins; 14 for the segments, 2 common anodes and 2 for decimal places (unused), and it’s not multiplexed.

Using a voltmeter, I get ~2v when I measure across the display’s common anodes and any of the segments that are currently lit.

I wanted to start simple to get one digit working, so I connected one digit’s segments to pins 2-8 on the Arduino.

I’ve connected the common anode to a 5k resistor and then to the GND on the Arduino. I set pins 2-8 as pinMode(INPUT_PULLUP);

This actually worked. I’m able to do a !digitalRead on pins 2-8 and consistently get a HIGH or LOW for each of the corresponding LED segments that are lit. Using those values, I’m able to decode the values and derive the actual number being displayed. I did have to negate the result of the digitalRead as it was returning HIGH when I expected LOW.

My question is this: Why does this work? The common anode has the + side and the seven segments carry the - side (if they’re lit). But it only works if I connect the anode to GND and the segments to input pins. Don’t you always connect grounds to ground and voltages to input pins? I don’t think it would work to wire up the seven display pins to the Arduino GND pin and the common anode to an input pin???

Is there another way to wire this up to get the same result? How can I wire it up so I don’t have to negate the digitalReads? My concern is that if I want to read the value of another component on the same external device, say a button, I won’t be able to if I hook anything else up to the same GND pin that my common anode display is using. During one desperate hack I wired up a button switch on the same device to my Arduino and sure enough; when the button was pushed in the seven-segment display went “all on” and displayed “88” so I need a different wiring setup here…help!

That means your meter’s leads are connected the wrong way round, as there are, or should be, no negative voltages in your system this is an illusion. You should always take measurements with the negative lead on the ground, and always connect the grounds of two systems together. That way your measurements will make sense.

I did this many years ago when I interfaced a DVM chip to a BBC computer. I will post the diagram when I am on my computer and not my iPad.

It is not quite as easy as it sounds as you have no control over the multiplexing of the chip therefore rather than using the level of the multiplexer signal you need to detect the edge. You will probably have to use direct port addressing to read all the segments at once.

Does it have two pins for each segment? 14 segment connections for 7 segments?

Are you only reading digits? You might not need to read all 7 segments to tell which digit is being displayed.

The two Common Anode digit pins should be HIGH when the digit is lit. The segment cathodes should be LOW when the segment is lit. If you only need two digits I would use the external interrupt pins for the digits and RISING interrupts to detect when a digit is lit. In the interrupt service routine, read all the segment pins. The pattern of segment pins will tell you what digit is being displayed.

what is the mode / type of this external equipment? (link?).
Is it possible to connect a wire in the common (GND) of this equipment?

RV mineirin

That’s not a negative sign, it’s tilde which means approximately 2v on my voltmeter.

It has one pin per segment. There are two digits, each having 7 segments for a total of 14 pins for the digits. There are two unused DP pins and two common anode pins for a grand total of 18 pins on the LED display.

Yes, I’m only reading digits. I don’t think I need to use interrupts, what I have wired up works. I’m able to read the digit value I just don’t like how it’s wired with anode going to GND and segment pins going to IO pins. That’s the only way it works.

So it is, I can see this when I zoom in on the text but on an iPad it looks like a minus sign. Great choice of fonts there new forum designers.

I have trouble understanding why the anodes are going to ground, do you have a common ground between systems? Or have you actually got a common cathode display?

Connecting the anodes to GND was the only way I could get my digitaReads to actually work. The display is common anode:

I’ll post some pictures too. I hope that will help.

I don’t have a common ground between the external PCB and my Arduino. I think I need to find one, but I’m not sure what it would be? How do I choose?

@Grumpy_Mike @ruilviana @johnwasser Here are some pictures of my external circuit board. It’s from a Capitol Bingo Presidential console:
Front side:

Back side:

This is really the only schematic available, and it’s not that useful:

I didn’t know another way to wire this to my Arduino UNO. I connected the test strip pins to Arduino pins and the common anodes to Arduino GND and it works. But I don’t understand why and I don’t think it’s “right” to do it this way.

Also, my goal was to solder as little as possible or ideally not at all. I soldered two wires from the common anodes (pins 13 & 14) and connected them to Arduino GND. Other than that, no soldering thanks to that test pin strip!

Ideally I wouldn’t have to use any soldered wires but since the display is common anode, the segments only light up when they are passed a negative (ground) and I didn’t know how to connect all this up to an Arduino without having a + and a - side. I’m bad at electronics. Decent at code.

You shorted the two anodes together? Doesn’t that keep the display from working?

No, sorry. Let me be more clear. I soldered wire to pin 13 (see back side image) and a wire to pin 14. I connected each of those wires to a GND pin on my Arduino and it worked.

I didn’t know where else to connect things. I have 14 negative pins and 2 positive pins (anodes) on the display. How would I have connected them in order to do a digitalRead on the segment display pins?

Should I use the digital input pins as grounds for this to work? Maybe connect the two anodes to the 5V pin on the Arduino and the display’s segment pins to digital pins set as OUTPUT? I’m kinda lost here…

@Grumpy_Mike @johnwasser I found a picture that might help me ask my questions more clearly:

Suppose I had an existing working circuit that had this common anode display. How would I connect this up to the Arduino in order to detect which segments are currently receiving the GND/LOW signal? What pinMode(s) would I use on each of the Arduino pins? Where would I connect VCC? To what would I connect the GND pin on the Arduino? Thank you for your patience. Happy to start a new thread if that would be better!

Could be easier to read the BCD-code on the four input pins of the display driver (74LS247).
That’s only four signal wires to decode.
And there must of course be a matrix signal, to flip between the two digits of the display (switching the anodes).

Look at the arrow and circles I marked on the two figures.
I assume that pins 13 and 14 of DISP2 are connected together and are also connected to pins 13 and 14 of DISP1.

So you can use the GND of this PCB.
Measure the voltage value on pins 13 and 14 with a multimeter. With reference to the GND of this PCB the multimeter.

OK, how would I find GND on this PCB?

Once I find GND and I measure the voltage on pins 13 & 14, what will that tell me?

Pin 8 of the SN74LS247 is GND.

I want to make sure that the voltage used is not above the voltage of the arduino.

What arduino are you using on this project?