7-Segment Serial Display - Blue

Description:Replacement:COM-11442. We’ve overhauled this board adding I2C functionality, and Arduino bootloader and mounting holes! This page is for reference only.

The 7-Segment Serial Display turns the thirteen pins necessary to control a 4-digit seven segment display into just one or three. The display will give you full control of all digits, decimal points, the colon and the apostrophe. At the heart of the display is an ATMega328 which controls all the serial communications and the 4-digit 7-segment display through an easy to use API.

The Serial 7-Segment Display can be controlled in one of two ways: (1) serial TTL communication or (2) SPI serial communication. Regardless of which method you use to communicate with the display, the display is controlled with 4-byte packets and special 2-byte commands.

New for version 2: The input and power pins have been moved to the top of the display, allowing you to place the displays side-by-side. Additional characters have been added, including the “-”. A reset display command and single character control have also been added. See the new user’s manual below for detailed information about all of the new features!

Customer Comments

Could someone explain to me how this board can work without resistors?<br />
<br />
I would have thought the AVR processor would feed 5V to the LEDs, and with a maximum output current of 40 mA per digital pin, would burn the LED.<br />
<br />
Why does this not happen?<br />
<br />
Trying to learn!

The user’s manual does not explain how the circuit works internally.<br />
<br />
From what I can tell the ATMega digital outputs (5V when high) are connected directly to the 7-segment display.<br />
<br />
Even if the ATMega uses PWM, 5V (or 40 mA for that matter) even for a short time should be enough to burn the LEDs.<br />
<br />
Can you explain what current goes to the segment LEDs when they are turned on by the ATMega?<br />
<br />
Thank you.<br />
<br />RobertC.:<br />
<br />

Check the user’s manual. It is driven through the ATmega controller, so it takes care of all of that for you.
<br />
<br />
<br />

no current limit resistor? sorry, no way I’ll buy this device! it won’t last long enough.

YES, i realize you control average power in the LEDs via PWM but the PEAK current is limited by the inherent resistance of the output drivers. They’re called ABSOLUTE MAXIMUM RATINGS for a reason. Even if your average current meets LED spec the PEAK will exceed the ATmega328 output pin abs max.

“It takes care of all that for you” is not an acceptable justification for lack of series PEAK current limiting.

Turn down the brightness a little and it will definitely last. I’ve been running one a couple of notches below max brightness for quite a while with no problems. It’s not the current that damages things, it’s the dissipated heat. The PWM method utilizing pulse width and duty cycle is a good way to manage heat but too large a pulse or too high a duty cycle can burn things anyway.

this will be my last, you can have the last response after this if you want – but exceeding the manufacturers ABSOLUTE MAXIMUM RATINGS is simply bad practice. I fully, deeply, understand the average dissipated heat (Tj) issue; but peak current within the final driver transistor is still exceeded.

And “turn down the brightness and it will last” is basically admission that the design is inadequate. I simply don’t buy it, and won’t. It simply needs an 80-ohm resistor in series with each cathode for the worst case (red LEDs (1.34V or whatever) to limit peak to 50mA. Why design in limited life when full product life is just a few resistors away?

Very nice product.
Had some trouble getting it to work correctly. The following link was very helpful: http://www.arunet.co.uk/tkboyd/ec/ec1led4x7ser.htm
The key is to initialize the display a couple times on start up using the 0x76 command for reset. (“v” works also)
Then load it with your favorite charters to make sure it worked.
Then the set the brightness command 0x7A command. I use 0x7A, 0X40 for 75% brightness.
75% brightness should extend battery life, and prevent the display from burning out prematurely. (remember 0x254 is 100% too bright. 0x7F or 50% is probably too dim).
This product needs a little patience for inexperience programmers.
It is good to send the reset command before you send other commands. ( send the reset command on one line of code then your special command, or 4 byte display command on the next line.)
Again nice product; good alternative to a LCD, when cost is a issue.

I notice different numbers do not illuminate at the same brightness. Most noticeable between 1 and 8 or the apostrophe and 8. I guess it is because the ATmega can’t supply enough current to drive segments equally regardless of how many are on.

Still a great display for development but maybe not for a finished product. Especially nice that it is open source and you can enhance if desired.

Here’s a simlpe 3D sketchup model for anyone rendering their boards in 3D. I am using a simple 8x1 header in my eagle board and associating it to this model with Eagleup (sketchup exporter) : http://cl.ly/3Q3T26330j44073d2T2V

Just finish a library for this display: https://www.dropbox.com/s/ssvydwuf3js3cb5/Serial7.zip
It has a lot of features and works great on the Arduino UNO.
Also supports the ATtiny45 & ATtiny85 (except floating point math).

I made a basic clock using this module with an Arduino and a DS1307 RTC module. My code has support for this module and the earlier revision (include the appropriate define in the .h file). https://github.com/azrobbo/Arduino-Clock-Seven-Segment

Hey all. I wrote an Arduino library for this display and figured others might find it useful. It essentially takes care of outputting a number over serial including shifting around the decimal point. More info at http://javconcepts.com/39/Serial7_Arduino_Library/.

You will need to use the software serial lib. Once you have that included you should be able to use any two of the digital I/O pins to communicate to each display independently. Your other option would be use SPI communication. This has a chip select ability to control multiple displays. In this case you would use the MOSI and SCK pins of the Arduino then you will need to use one digital out to each display’s CSN pin.

Total noob here. Can someone please get me started on the code that I need to create a light meter. I plan on using a basic CdS photosensor to feed a voltage (that is proportional to intensity) into my arduino’s analog input. Then, I would like to use this 7 segment display to output that intensity, and I don’t care about about units or scale at this point. Thank You in advance!

Really nice bright display :)geek clock
^ looks much more deep blue in real life
Hey Sparkfun! for the next version, why not add a jumper to prevent accidentally setting the baud rate?!
Connecting cables to the display often generates enough noise that gets mistaken for a set baud rate command :/
As a workaround, I run a setup routine at startup which tries every available baud rate to set the desired baud rate.

I really like these displays, I’ve used the blue, green, and red. I connect them to an FTDI cable or break-out, heat shrink the assembly, then trim out a window for the digits with an exacto. Makes a nice little toy for a geek.
A request though, for the next revision… please consider calling the UART TX pin as well as RX. That way a UART programmable bootloader could be installed, making firmware updates much easier. In fact, you could even pre-install the bootloader! :)

obscure question: why not breakout the unused ADC6/7 lines? 2 buttons and a little more code, you have a clock, or a timer, or an ADC input for voltage measurement :) I like SPI, but i believe a lot more use could be put into this if it didn’t rely entirely on a master controller elsewhere, especially with the SPI/programming pins being broken out already.

Hello All
I just started to play with this little guy. Love the cool blue display.
However the “Users Manual” on this devivce is a bit thin on interfacing to the Uno - especially (1Pin) Serial TTL Mode.
I got this working on SPI ok with Thanks to
http://tronixstuff.wordpress.com/2011/05/13/tutorial-arduino-and-the-spi-bus/
But I had difficulty with serial TTL.
I found demos that worked well with Thanks to
http://www.arunet.co.uk/tkboyd/ec/ec1led4x7ser.htm
NewSoftSerial library required…. Once again Thanks to
http://arduiniana.org/libraries/newsoftserial/
Bye…

i have this. I connected it via SPI as from the forum example (http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1247533060). It works perfectly when it is running off the arduino 5V pin, however when I attempt to run it from the 3.3v pin the display shows garbled results.
I was under the assumption that it could run from 3.3v as per the datasheet. “The
display can be powered at anywhere between 2.6 to 5.5V"
I need to be able to run it from a pro-mini 3.3v and lithium battery to keep it small- it is for a wrist watch. Any reason that 3.3 would make it display gibberish?

This module is great - inexpensive and really flexible. Just a couple of things I wish it had:
- Fixing holes in the PCB
- Pull-down resistors on (at least) the RX and SCK pins.
Without the resistors the module is extremely sensitive to noise, which corrupts the display and can reprogram the baud rate. Since the baud is kept between resets, for a moment I thought I had bricked one of my displays.
Maybe enabling the built-in pull-up resistors in the ATmega328 would be sufficient to resist interference?

Silly question, but I’m using this display for one of my projects and there appears to be a clear plastic film over it. I can pick up a corner, but it’s otherwise glued down pretty good. Do you know if this is just a protection for shipping/install purposes? I don’t want to pull it off if I’m not supposed to!

I am able to change the brightness of the display over SPI using my ATmega16. Does anyone have issues with looping the brightness level between 0-254 ? Mine stops at roughly level 118 and then clears the screen.

Thanks so much for this. Only problem I ran into is that displaying the numbers by decimal can be a bit confusing. I’m using it to display the time ( 24Hr Time), and when my clock switched past 19:59 to 20:00, it really went to 1A:00. This caused the display to go nutz. with the 1A and trying to realize that 0x00 was really something I wanted to display. I switched to sending ascii representation and everything seems to be working fine.

where is SparkFun NL, this rocks man…!!
I almost buy everything on Sparkfun today, no more 100x websites searching just go to sparkfun… But a Sparkfun in the EU / NL would be great (to get products faster @ home)

I’m looking at a 7-Segment Serial Display - Blue,
sku: COM-09765, that someone gave me today. I downloaded the schematic from this page (products/9765) but it doesn’t reflect the hardware correctly (i.e., JP2). I think I’ve figured it out but is there a current schematic?

I was not able to get this working using SPI (UBW32) - but I’m no expert. It displayed something, but it seemed bit-shifted left.
UART works very well, and at 9600 I managed to get it working in software (rather than use a hardware UART). I cheated on the timing and used a TIMER.

You are probably clocking data at the falling edge instead of the rising edge. Look at the datasheet for the SPI on your Micro, and there will be a bit you can set or clear to change this option. I had the same problem, and this fixed it.

Hmmm. I have tried several times to send serial commands to the display, only to get garbage. tried it at every baud rate except 14400. Its not very easy to set strange baud rates on a PICAXE. Any pointers?

Ah, what I wouldn’t give for the unused pins on the AVR to be exposed somewhere! Those two unused ADCs and three PORTB pins would be great for making this a completely self-contained (sans power supply) project I’m working on. :)
Wonder how good my fine soldering skills are? :)

The data sheet for this device says that:
“Sending the reset display command, 0x76, will clear
the display and set the cursor to the first digit."
However, I want to send 0x7B 0x76 (which should illuminate a capital "H” on the first digit because 0x76 is the correct segment bit pattern. However, in the source, one can see that the check for blanking (0x76) is made before the “digit control” check.
I’d call that a bug. One can easily work around it, but it’d be a good idea to fix it in a later rev of the firmware.

It’s 0.4150" deep from the face of the LED’s to the top of the capacitor on the back. <br />
<br />
It’s .3500" from the face of the LED’s to the back of the PCB.<br />
<br />
And it’s .3865" from the face of the LED’s to the top of the ATMega328.

This display is fantastic. It has a nice old school look to it. The blue LED’s make it even more awesome.
Here is an example of scrolling text on the display using an Arduino. My code is linked in the video descriptionhttp://www.youtube.com/watch?v=WFEq9U17cKk
Thanks sparkfun for creating such a cool display. For your next trick can you make an alpha-numeric version of this?

The original datasheet says the SPI interface would run at 2MHz whereas it will only do 250KHz at best - and even then it won’t ever be 100% reliable. The firmware is absolutely shocking, and (amongst other problems) the SPI ISR overruns. See http://bleaklow.com/2010/08/28/sparkfun_are_less_than_electrifying.html for the sorry details. My advice - avoid this product.

This comment almost scared me away from this product. But I bought it anyways because I want something simple. I had this thing working within 30 minutes of soldering it into my board. GREAT PRODUCT. EASY TO USE. And I can’t see faster than 250khz anyways. The only problem would be if you want to bit bang the SPI bus. But if you have a SPI port on your micro, it should be pretty easy to deal with.

I wonder if the SPI pins and the reset are connected to the corresponding pins on the ATMega 328? If they are, then couldnt the chip be reprogrammed via ISP?<br />
<br />
This would allow an update of the firmware and the loading of some custom character and such.

How did you manage to reprogram this? I have the sparkfun pocket avr and I have had NO LUCK in connecting to or reprograming this thing. I can connect the pocket avr to a standard arduino just fine. But when trying to connect to this thing all I get is:
“avrdude -c usbtiny -B 1 -patmega328p”

very nice display. Thanks to Sparkfun.
However, I would like to modify the firmware, in order to add a new command and other things:
I need a new command to ask the name to the device (It has to return me some bytes to identify the kind of display).

I need to add one byte more, with a checksum of the first four ones (it is going to work in a noisy place).

Yes, I need a Tx connection. ¿Does it have) (with other name…)
Is possible to update the display firmware, using the existing connections? What is the way? Could you give me more details?

I have solved it. The issue was that although i was calling the SLAVESELECT LOW/HIGH in different functions they didn’t get along.
To make the display show clean you must call it only once per loop cycle and place all display calls between a single SLAVESELECT low and SLAVESELECT high

I have been enjoying toying around with this display for a new clock I am making. However, if I am having problems with the first digit. It flashes 0 whenever I am trying to calculate numbers before writing them. I posted a forum question at http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1281958058
any advice on how to make it show blank when time is less than 12 and not flicker 0 when above.

I was looking for a serial 7-segment display, and the blue sold me. :) I have 2 coming via FedEx.
I would like to mask the display with a lens to give a ‘blackout’ look when off.
I am guessing blue, but any input on color? Thanks!

Can’t seem to change the baud rate. I need it to work at 4800 or less because I wanted to use it with those cheap little RF links. I have it working with an arduino, I can change brightness,but I’ve never been able to change the baud rate.

I bought several of these, and one mysteriously came set to 57600. I kept trying to change the baud rate, unsuccessfully. Tried to change another to 57600 so I’d have two with the same baud rate, and instead, it set it to 4800. There’s definitely something fishy with the baud rate command.

Ok…so I’m an idiot and got this thing to work via spi so I can vouch for its being idiot-proof! I do have a feature request though… while interfacing with an arduino I realized I was writing a lot of code to convert my data (a four digit integer stored as a 16 bit integer) into a char array so that I could easily send the data to the LCD. I started worrying about the effect on my execution time and how maybe I could move the int-to-BCD function to another micro offboard when it hit me… why not add the capabilty to convert UNIT16s to BCD to this board! I’d suggest yet another command byte, followed by two bytes representing the 16 bit INT which the module could correctly parse into the four display characters. Thanks in advance!

Yeah, I think you guys are going to have to crank up production on these. ;-) I’m letting my customers know they are available in more colors now. Though I would expect the blue ones to be the most popular just because of the HALO games. I hooked one of these up to my laser tag system and it is ULTRA COOL to watch those blue digits counting off your rounds. Thanks again for getting these out in all the colors!

Customer Reviews

SparkFun is an online retail store that sells the bits and pieces to
make your electronics projects possible. Whether it's a robot that can
cook your breakfast or a GPS cat tracking device, our products and
resources are designed to make the world of electronics more accessible.

In addition to products, SparkFun also offers
classes and online tutorials to help educate
individuals in the wonderful world of embedded electronics.