Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

#479 LedControl MAX7219 7-Segment LED Driver

Driving a series of 7-segment LED displays with the MAX7219 and the LedControl library.

Build

Notes

The MAX7219 is a popular serially Interfaced, 8-Digit, LED Display Driver.

It is often used in LED display modules such as this 8 Digit Module from a seller on aliexpress.

The MAX7219 can drive up to 8 common-cathode LED 7-segment units, and can be cascaded to support more digits. The 8x8 outputs can actually be used for any kind of LED display, not just 7-segment displays.

Only one external resistor is required to set the segment current for all LEDs. Current per segment is approximately 100 times the current at pin ISET i.e. ISET is pulled high with an appropriate resistor for the desired current. The current will however also depend on the forward voltage of the LEDs.

MAX7219

MAX7219 Serial Connection

The MAX7219 is connected to the Arduino with three pins as follows. The actual Arduino pin used is not significant, although in this example I have used the conventional SPI pins.

Connection Arduino Pin MAX7219 Pin
CS 10 12
MOSI/DIN 11 1
SCK/CLK 13 13

Scan-Limit Register

The MAX7219 multiplexes the output for up to 8 digits. The scan-limit register sets how many digits are connected, so that the scan can avoid looping through digits that are not conencted.

Decode Mode Register

The MAX7219 allows digits and segments to be addressed individually. This is the "no decode" mode, and requires the host controller to figure out how to draw digits on the LED display.

A "Code-B" mode can be enabled, that allows the digits 0-9 and a small set of characters to be displayed, per the following table. The decimal point is enabled for any of these characters by setting the high bit. Unfortunately, the code set does not include A-F for hexadecimal number display.

Display Input Value Display Input Value
0 0x00 0. 0x80
1 0x01 1. 0x81
2 0x02 2. 0x82
3 0x03 3. 0x83
4 0x04 4. 0x84
5 0x05 5. 0x85
6 0x06 6. 0x86
7 0x07 7. 0x87
8 0x08 8. 0x88
9 0x09 9. 0x89
- 0x0A -. 0x8A
E 0x0B E. 0x8B
H 0x0C H. 0x8C
L 0x0D L. 0x8D
P 0x0E P. 0x8E
(blank) 0x0F . 0x8F

The Decode Mode register is set as follows:

Behaviour Set
No decode for all digits 0-7 0x00
Code-B decode for digit 0 only 0x01
Code-B decode for digits 0-3 only 0x0F
Code-B decode for all digits 0-7 0xFF

LED 7-Segment Components

The 7-segment components I'm using here are similar to the SC56-11.

SC56-11_mechanical

Segment SC56-11 pin MAX7219 pin
a 7 14
b 6 16
c 4 20
d 2 23
e 1 21
f 9 15
g 10 17
dp 5 22

Example Code

The RawDrive.ino sketch demonstrates a simple 0.0 to 9.9 counter using two 7-segment units. It doesn't use any libraries, just the standard shiftOut function to send commands to the MAX7219.

Construction

Breadboard

Schematic

Build

Credits and References