is there a way to test out a segment display without wiring it up?

ok, i just had a friend leave my house all upset after being here on the forum because of his segment display.. is there a way to just test out what each pin is without having to wire it all up.. like what will light A,BC, ect..? because i looked at the thing and even i don 't know what is what. or should i just tell him to get a common cathode one? i don't think radio shack sells any others than single digit.

Yes get a power supply and connect a 1K resistor to the +ve lead and a wire to the -ve. Then just probe arround lighting up one segment at a time.

i just had a friend leave my house all upset after being here on the forum because of his segment display.

That would be "cupstacker" - you've got the same IP address.
Tell him/her they need a multimeter.

As I told your friend you can get a 8-digit display, with a MAX7219 chip, plus a circuit board to make it work, all you have to do is solder on about 6 things (one chip, 2 x 4 digit LEDs, 2 capacitors, one resistor). All that for around $10 on eBay.

However as Mike said some sort of power source (eg. from the Arduino 5v pin) and a resistor in series, like 1k or thereabouts, and you can quickly test it. He had the datasheet, but wasn't sure if it was common anode or cathode, so simply testing one set of pins and comparing to the datasheet should do it.

If he has the wrong sort of LED, no amount of biting our heads off will fix that. You could get the ones that will actually work from eBay for a couple of dollars no doubt.

@awol - doesn't matter who it was, i just feel bad he left my house all upset over a minor thing even i haven't figured out and he was at it for 2 days. i sat here for 10 minutes with it and i don't know.. i never used a more than a single digit display.

@nick - his project didn't require more than 3 digit, infact he was trying to take over my original project that i had postponed. he wanted to use a 3 digit vs my 2 digit and his idea to it made a lot more sense for it. that's why he didn't want to bother with it.

doesn't matter who it was

Amen.

However, not spending a few dollars on multimeter (and a couple of hours learning how to use it) vs berating people for not going out and buying the same device as him/her and doing their work for them really doesn't work for me.

Ruffsta:
@nick - his project didn't require more than 3 digit, infact he was trying to take over my original project that i had postponed. he wanted to use a 3 digit vs my 2 digit and his idea to it made a lot more sense for it. that's why he didn't want to bother with it.

OK, well you can get this from eBay:

5 Pcs Common Cathode 12 Pin 3 Bit 7 Segment 0.4" Red LED Display

5 pieces for $6.60, so for around $1.32 each.

I have a schematic on this page:

Plus code.

Get the LED, follow the schematic, copy and paste the code, and you're done! (Of course, leave off one of the digit pins because that was for 4 digits, not 3).

It works. But your friend needs to be prepared to listen to what people are saying and not leave pins disconnected because he doesn't care about them.

hmm, i get the following from the display while testing it.. now it just has to be connected. so he was right, i lit them up and they match.

1 - e
2 - d
3 - dp
4 - c
5 - g
6 - no pin
7 - b
8 - common
9 - common
10 - f
11 - a
12 - common

k, i rewired it to the following.. just don't know where to connect the commons.. should they be 8 to DIG 0, 9 to DIG 1 and 12 to DIG 2?
1(e) to 21 = seg E
2(d) to 23 = seg D
3(dp) - is not connected because not using DP
4(c) to 20 = seg C
5(g) to 17 = seg G
6 - no pin so not connected
7(b) to 16 = seg B
8(common) to ??? DIG 0
9(common) to ??? DIG 1
10(f) to 15 = SEG F
11(a) to 14 = SEG A
12(common) to ??? DIG 2

and i get the same thing he did.. 888

I see the big problem as this: You've indicated that you have a Common Anode display. MAX7219 only works with Common Cathode.
So, find a common cathode part.

yeah, he said that a long time ago... so, basically have to spend more money and wait for shipping. no way to use these with the chip without SPI?

Not without adding more transistors. Review the 3-segment topic, I posted the Maxim applicaiton note on how to do that.

In your testing - you had the commons high and the segments low?

k, well i would like to pause this topic until i get the new displays.. is there a way we can temporarily lock this topic?

Temporarily locked ...

Ruffsta:
yeah, he said that a long time ago... so, basically have to spend more money and wait for shipping. no way to use these with the chip without SPI?

If you have 8 resistors you could multiplex yourself. You only need 11 pins and the Arduino has 20.

Use resistors in series with the 8 segments (a to f, and dp) and then connect everything up to pins. Drive one digit pin low (or high, whichever way around it is) and the appropriate segments pins the other way around. That way one or more segments lights up for one digit. For example, "a" and "b" segment on digit 1. The do the next digit, lighting the correct segments. Do this quickly enough and it looks like they are all on at once.

Here’s how you could do that.

Connect each segment via a resistor (I used 1k) to pins 2 to 8, (segment a to 2, segment b to 3 and so on).
Connect each digit (no resistor) to pins 9, 10, 11 (pin 9 is DIG1, pin 10 is DIG2, pin 11 is DIG3).

It would look like this:

Those black things on the right are resistor arrays. Don’t try to do it without resistors or you’ll damage your Arduino!

Now because it is common anode you need to bring the digits HIGH and the segments LOW to light them.

// Demonstration of LED multiplexing with Arduino
// Author: Nick Gammon
// Date: 2 December 2013

const byte PATTERN_COUNT = 10;
const byte SEGMENTS = 7;
const byte DIGITS = 3;

const byte columnPins [SEGMENTS] = { 2, 3, 4, 5, 6, 7, 8 };  // a, b, c, d, e, f, g
const byte digitPins [DIGITS]    = { 9, 10, 11 };    // DIG1, DIG2, DIG3


const byte digitSegments [PATTERN_COUNT] [SEGMENTS] =
  {
  { 1, 1, 1, 1, 1, 1, 0 }, // 0  
  { 0, 1, 1, 0, 0, 0, 0 }, // 1  
  { 1, 1, 0, 1, 1, 0, 1 }, // 2  
  { 1, 1, 1, 1, 0, 0, 1 }, // 3  
  { 0, 1, 1, 0, 0, 1, 1 }, // 4  
  { 1, 0, 1, 1, 0, 1, 1 }, // 5  
  { 1, 0, 1, 1, 1, 1, 1 }, // 6  
  { 1, 1, 1, 0, 0, 0, 0 }, // 7  
  { 1, 1, 1, 1, 1, 1, 1 }, // 8  
  { 1, 1, 1, 1, 0, 1, 1 }, // 9  
    
  };

void setup() 
  {
  for (int i = 0; i < SEGMENTS; i++)
    pinMode(columnPins[i], OUTPUT);  // make all the LED pins outputs
    
  for (int i = 0; i < DIGITS; i++)
    {
    pinMode(digitPins[i], OUTPUT);
    digitalWrite (digitPins[i], LOW);
    }
  } // end of setup
  
byte numberToShow [DIGITS] = { 1, 2, 3 };
  
void displayNumber ()
  {
  for (byte i = 0; i < DIGITS; i++)
    {
    if (numberToShow [i] >= PATTERN_COUNT)
      continue;  // out of range
    
    for (byte j = 0; j < SEGMENTS; j++)
      digitalWrite (columnPins [j], digitSegments [numberToShow [i]] [j] ? LOW : HIGH);
      
    digitalWrite (digitPins [i], HIGH);
    delay (5);
    digitalWrite (digitPins [i], LOW);
    }  // end of for each digit  
  } // end of displayNumber


void loop ()
  {
  displayNumber ();
  } // end of loop

You have to call displayNumber repeatedly for the digits to stay on. I’ll work on a version that uses a timer to let you do other stuff.

This uses a timer interrupt so you can be doing other stuff and the display still shows the digits (which effectively is what the MAX7219 does).

// Demonstration of LED multiplexing with Arduino
// Author: Nick Gammon
// Date: 2 December 2013

// Put a suitable resistor in series with each segment LED (eg. 180 ohm)

const byte PATTERN_COUNT = 10;
const byte SEGMENTS = 7;
const byte DIGITS = 3;

const byte columnPins [SEGMENTS] = { 2, 3, 4, 5, 6, 7, 8 };  // a, b, c, d, e, f, g
const byte digitPins [DIGITS]    = { 9, 10, 11 };    // DIG1, DIG2, DIG3
#define COMMON_ANODE true    // make false for commond cathode LEDs


#if COMMON_ANODE
  // For common ANODE:
  const byte SEGMENT_ON = LOW;
  const byte SEGMENT_OFF = HIGH;
  const byte DIGIT_ON = HIGH;
  const byte DIGIT_OFF = LOW;
#else
  // For common CATHODE:
  const byte SEGMENT_ON = HIGH;
  const byte SEGMENT_OFF = LOW;
  const byte DIGIT_ON = LOW;
  const byte DIGIT_OFF = HIGH;
#endif  // COMMON_ANODE


const byte digitSegments [PATTERN_COUNT] [SEGMENTS] =
  {
  { 1, 1, 1, 1, 1, 1, 0 }, // 0  
  { 0, 1, 1, 0, 0, 0, 0 }, // 1  
  { 1, 1, 0, 1, 1, 0, 1 }, // 2  
  { 1, 1, 1, 1, 0, 0, 1 }, // 3  
  { 0, 1, 1, 0, 0, 1, 1 }, // 4  
  { 1, 0, 1, 1, 0, 1, 1 }, // 5  
  { 1, 0, 1, 1, 1, 1, 1 }, // 6  
  { 1, 1, 1, 0, 0, 0, 0 }, // 7  
  { 1, 1, 1, 1, 1, 1, 1 }, // 8  
  { 1, 1, 1, 1, 0, 1, 1 }, // 9  
    
  };

byte numberToShow [DIGITS] = { 1, 2, 3 };

void displayNumber ()
  {
  static byte digit = 0;
  byte thisDigit = numberToShow [digit];
  
  // check for out of range
  if (thisDigit >= PATTERN_COUNT)
    thisDigit = 0;
    
  // turn off old digit
  for (int i = 0; i < DIGITS; i++)
    digitalWrite (digitPins[i], DIGIT_OFF);
    
  // set segments
  for (byte j = 0; j < SEGMENTS; j++)
    digitalWrite (columnPins [j], digitSegments [thisDigit] [j] ? SEGMENT_ON : SEGMENT_OFF);
    
  // activate this digit
  digitalWrite (digitPins [digit], DIGIT_ON);
    
  // wrap if necessary
  if (++digit >= DIGITS)
    digit = 0;
  } // end of displayNumber

// timer Interrupt Service Routine (ISR) to update the LEDs
ISR (TIMER2_COMPA_vect) 
  {
  displayNumber ();
  }  // end of TIMER2_COMPA_vect


void setup() 
  {
  for (int i = 0; i < SEGMENTS; i++)
    pinMode(columnPins[i], OUTPUT);  // make all the segment pins outputs
    
  for (int i = 0; i < DIGITS; i++)
    pinMode(digitPins[i], OUTPUT);   // make all the digit pins outputs
    
  // set up to draw the display repeatedly
  
  // Stop timer 2
  TCCR2A = 0;
  TCCR2B = 0;

  // Timer 2 - gives us a constant interrupt to refresh the LED display
  TCCR2A = bit (WGM21) ;   // CTC mode
  OCR2A  = 63;            // count up to 64  (zero relative!!!!)
  // Timer 2 - interrupt on match at about 2 kHz
  TIMSK2 = bit (OCIE2A);   // enable Timer2 Interrupt
  // start Timer 2
  TCCR2B =  bit (CS20) | bit (CS22) ;  // prescaler of 128
  
  } // end of setup
  

void loop ()
  {
  unsigned long elapsedSeconds = millis () / 1000;
  
  char buf [10];
  
  sprintf (buf, "%03ld", elapsedSeconds);
  
  for (byte i = 0; i < 3; i++)
    numberToShow [i] = buf [i] & 0x0F;
    
  } // end of loop

As a demo, it shows the number of seconds in the display counting up. The main loop handles setting up the thing to be displayed and the timer interrupt actually does the displaying.

I've done a bit more of a write-up below. That shows the schematic and gives a bit more detail.

The basic idea lets you multiplex up to four LEDs (you could probably do even more if you could spare the output pins and allowed for the current consumption).

CrossRoads:
Temporarily locked ...

for a reason... new displays ordered.. common cathode and i asked nicely to pause the topic, therefore it was temp locked until i got the new parts. because we are going to continue with the max7219 as we started.. just have to swap out the displays when i get them.

Sure, but don't you want to try making it work with the part you have there? My post showed how to do it with a common anode display, like you have right there.

You seemed keen to get it working, and I spent half the day making up an example showing how you could do just that.

OK, I'll lock it again. I hope I don't get too many more whining personal messages about it from you or cupstacker.

To anyone else that is interested:

That works well with a 4 digit LED (of course you can make it work with a 3 digit one as well) with no extra hardware apart from 7 resistors.

Ruffsta:
k, well i would like to pause this topic until i get the new displays.. is there a way we can temporarily lock this topic?

It's not your job to ask that threads get "temporarily locked". Moderators lock a thread when it gets out of control, as this one seems to have done, like the one of your "friend" cupstacker's.