Jump to content
Sign in to follow this  
Peabody

Multiplexing 7-segment displays by segment

Recommended Posts

In case it might be of use to someone, I've posted a Youtube video and created a Github repo dealing with an alternate way of multiplexing 7-segment displays that has a greatly reduced parts count.  It's multiplexing by segment instead of by digit.  The video shows this method implemented with an MSP430G2553.  The Github repo has demonstration Arduino Nano sketches, but they should work as-is with Energia except for the pin assignments.  The video is on my local OSH group's channel, and I can't respond to comments there, but will answer questions here if there are any.

https://www.youtube.com/watch?v=8w09Zy8MQrc

https://github.com/gbhug5a/7-Segment-Displays-Multiplex-by-Segment

Share this post


Link to post
Share on other sites

This is OK, but my MSP430G2533 7-segment working (multiplexing) digit-by-digit without resistors. Current (and brightness) is handled by PWM (WD). Device (PDIP) is mounted under the display.

 

p1.jpg

Share this post


Link to post
Share on other sites

That's very interesting.  Do you vary the PWM rate depending on the number of segments being lit up?  And no resistors on the common cathodes?

 

Share this post


Link to post
Share on other sites
55 minutes ago, Peabody said:

That's very interesting.  Do you vary the PWM rate depending on the number of segments being lit up?  And no resistors on the common cathodes?

In my case, as you can see, intensity (brightness) of each segment is equal. To have this, time for displaying number "1" must be shorter than time for displaying number "6" (last digit).

There is no any resistors. Common anode/cathode is powered by extra lvc logic gate, not by transistor, so hardware and software as it is, support both options, and mixed combination (for example 1 digit can be common anode and another 2 common cathode).

It is codded in assembler, refreshing interrupt (0.5 ms per segment ~ 5 ms per digit) is triggered by WDT (timer peripheral is not used), and in worst case scenario, interrupt will take about 30 CPU cycles.

Share this post


Link to post
Share on other sites

OK, so you don't use a timer-based PWM output, but vary the ON time in your code (NOPs or whatever) based on the number of segments being lit.  And I assume the "worst case" is displaying an 8.  Well that's pretty cool.  And assembler is good for this kind of thing.  I did all of my version in MSP430 assembler first, then moved it to Energia/Arduino to make it more accessible.

What LVC part did you use?

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×