STATEMENT:  I have a problem refreshing, the  20 odd displays in less than 1/4 second each, which would let them seem that there all bright, but they will be dim, to begin with. So multiplexing is now out for the 7 segment displays, but I still will multiplex the four 16 segment displays.

SOLUTION: I found an IC that handles eight 7-segment displays and it has a built-in SPI interface. The device is a MAX-7221 which will give me a solution for my problem.

As you can see in the block diagram this device has separate segment and digit drivers.

Arduino Mega
SCLKMOSIMISOCS
525150
MAX-7211

CLK

(13)

DIN
(1)


N.A
LOAD
12
SC-0 (49

SC-1 (48)

CS-2 (47)
Table I
Arduino 3-bit Decoder Pins
484746
Arduino Alpha Drive Pins
4544434241
4039383736
3534333231
30----
Table II

 

As shown in Table I  the pins between the Arduino Mega and the MAX-7221. You will please notice that the MAX-7221 does not require MISO, and as it is ONLY a SLAVE.  You will also notice the change in the Pin Definitions promulgated by the Open Source Hardware Association.

As shown in Table II the pins between the Arduino Mega and the four 16-segment displays.  Pins 46, 47, 48 are the output to the row select which is accomplished by a BCD to Decimal

To drive this device is really quite simple, gee I wish I had some bi-polar PROMs So I will have to do this the hard way. First I have to map the display to a letter. But the web to the rescue. there is a 16-segment font for your CRT etc.  So I still have a lot of work to do.

LetterASCIIIndexABCDEFGHIJKLMNOPLetterASCIIIndexABCDEFGHIJKLMNOP
A4111xxxxxxxxS5329xxxxxx
B4212xxxxxxxxxT5430xxxx
C4313xxxxxxU5531xxxxxx
D4414xxxxxxV5632xxxx
E4515xxxxxxxxW5733xxxxxx
F4616xxxxxxX5834xxxx
G4717xxxxxxxxY5935xxxxx
H4818xxxxxxZ5A36xxxxxx
I4919xxxxxx0300xxxxxxxxxx
J4A20xxxxx1311xx
K4B21xxxxxxx2322xxxxxxxx
L4C22xxxx3333xxxxxxxx
M4D23xxxxxx4344xxxxx
N4E24xxxxxx5355xxxxxxxx
O4F25xxxxxxxx6366xxxxxxxx
P5026xxxxxxx7377xxxx
Q5127xxxxxxxxx8388xxxxxxxxxx
R5228xxxxxxxx9399xxxxxxxxx
Table III

typedef struct {

    int  offSet;

    int  hexChar;

    char letter;

    int  segments[16]; }  record_type ARRAY;

 

ARRAY[] ={{11, 31, 'A',{1,1,1,1,1,1,1,1,0,0,1,0,0,0,1,0}}, etc. };

 

void displayLetter ( char displayChar ) {

 

      for nt count = 0; count < 29; count++ ) {

          If  displayChar == ARRAY.letter; ) {

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  // A

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  // B

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  // C

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  // D

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  // E

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  // F

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  // G

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  // H

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  //  I

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  // J

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  // K

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count];);  // L

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  // M

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  //  N

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  //  O

                digitalWrite (ARRAY.segmentName[count], ARRAY.segments[count] );  //  P

              break; }}

Table IV

You will notice in table III  that I use an 'x' for TRUE or 1 and 'blank' for FALSE or 0.  Also, note my numbers start a 1 and then skips number 10. If you will notice I have 3 columns Letter, ASCII, and Index. I will use the Index column for my array but an array will not really work so you need a structure, see table IV the blue box on the right.