Running 10 4-digit 7-Segment displays from Arduino Mega 2560

First post here. I hope I provide enough information for getting sensible replies.

I am looking at a project to provide a stand-alone box to display positions for a 5-axis motor-controlled stage. I was thinking of using 2x 4-digit serial 7 segment displays (e.g. COM-11442) for each axis to give me 8 digits. So a total of 10 display modules. The box will receive data over wired Ethernet allowing it to be moved around the instrument.

First question: Is there a better solution that 10 seperate displays? I really don’t want to go down the route of a custom board and designing my own as it is not my area of expertise, and we will only ever be building 2 of these so there is no great economy of scale.

I intend driving these from an Arduino Mega 2560, though I may be able to get away with an UNO. Cost is really not an issue so I just feel happier using something with plenty of space.

Second question: what is the best way of controlling these to write the data? I had originally thought about using SPI and using a number of Output pins on the Mega to act as SS (i.e. 10 lines, one per board). While the refresh rates will not be super-fast (in fact a lot of the time there will be no values changing), when a stage is in motion I would like to be able to refresh each display pair in such a way as there is no obvious delay between the first and second 4 digits. SPI is clearly fast but I guess there are concerns about cable length and noise. Second thought was I2C since it is designed for multiple devices to be daisy-chained. I should not have problems of arbitration, because all of the communication will only be from the arduino to the displays. So any thoughts on this would be greatfully received. If there are any recommendations on special precautions on the serial lines (extra circuitry etc) please feel free to say. Don’t assume I necessarily know that something is needed.

I think that covers the main questions.

I will also be considering adding some extras to the box to possibly allow the user to drive the stages. Maybe a selector to switch between axes (LED indicator for the active axis), and then buttons to jog the stage (maybe with a fast/slow switch too). This control will go back over Ethernet to the commercial stage controllers.

What size must the digits be ? Must they be readable in bright sunlight ? Have you considered a graphical display ?

Not necessarily in bright sunlight. These will be in a lab. However a small 3-4" graphical display probably will not really be suitable. The 7-segment displays are popular for a reason. They are a good size for visibility.

Thanks for the thought though.

I have since seen 8 digit devices which may be another way to go.

Just another thought …

The 4 line by 20 character displays could be used to show 8 values. The OLEDs are quite “crisp”. Otherwise it’s a big graphical or your many 7 segments.

I have some of the 4-digit 7-segment displays to play with now. Overall very pleased with them. Interfacing very easy when using SPI (just one hooked up so far). Communications are nice and fast. Updating the whole 4 digits about 100 a second flat out with communication of the value from a PC over Ethernet.

The only issue I have at the moment is using the example code for turning on the various decimal places colon, apostrophe etc . When I try and turn on decimal place 4 I get “4” displayed in the first digit. (Command byte 0x77 followed by a byte bit mask)

Anyone playes with the decimal places and got this to work?

Interesting. I went back to the Sparkfun example and everything was OK. Copied that code across again and it didn’t work. The only thing I could think was different was in the Setup function where there was a delay after setting the brightness. I was guessing this was just so it let the user see something happen. However I added a 100 millisecond delay after setting brightness, and my decimal point then magically turned on correctly.

Haven’t seen anything in the docs about needing a delay, but I can live with it. Just wonder if there is anywhere (anyone) at SparkFun can send the information to make sure I am not soing anything wrong, and possibly for them to mention it in docs.