Skip to main content

Meadow.Foundation.Displays.Max7219

Max7219
StatusStatus badge: working
Source codeGitHub
Datasheet(s)GitHub
NuGet packageNuGet Gallery for Meadow.Foundation.Displays.Max7219

The MAX7219 is an LED display driver capable of driving 64 outputs. As well, the MAX7219 contains an 2-wire data bus allowing multiple MAX7219 chip to be connected together and controlled by a single I2C interface.

Although the MAX7219 can be used as a general purpose IO expander, it almost exclusively used to drive either 2-dimensional LED arrays (commonly 8x8) or an array of multi-segment displays (commonly 8 7-segment displays). The MAX7219 contains specific logic to display pre-configured characters when driving 7 segment displays, specifically: 0-9, E, H, L, P and -.

As it's most commonly used to as a display controller, you'll find it in the Meadow.Foundation.Displays namespace.

Code Example

Max7219 display;

public override Task Initialize()
{
Resolver.Log.Info("Initialize...");

display = new Max7219(Device.CreateSpiBus(), Device.Pins.D01, 1, Max7219.Max7219Mode.Character);

return base.Initialize();
}

void TestCharacterMode()
{
display.SetMode(Max7219.Max7219Mode.Character);
//show every supported character
for (int i = 0; i < (int)Max7219.CharacterType.Count; i++)
{
for (int digit = 0; digit < 8; digit++)
{
display.SetCharacter((Max7219.CharacterType)i, digit, i % 2 == 0);
}
display.Show();
}
}

void TestDigitalMode()
{
Resolver.Log.Info("Digital test");

display.SetMode(Max7219.Max7219Mode.Digital);
//control individual LEDs - for 8x8 matrix configurations - use the Meadow graphics library
for (byte i = 0; i < 64; i++)
{
for (int d = 0; d < 8; d++)
{
display.SetDigit(i, d);
}
display.Show();
}
}

public override Task Run()
{
while (true)
{
TestDigitalMode();
TestCharacterMode();
}
}

Sample project(s) available on GitHub

Wiring Example

To wire a Max7219 to your Meadow board, connect the following:

Wiring a SevenSegment to a Meadow F7

Class Max7219

Max7219 LED matrix driver

Assembly: Max7219.dll
View Source
Declaration
public class Max7219 : ISpiPeripheral, IDisposable, IPixelDisplay, IDisplay, IPixelBuffer

Implements:
Meadow.Hardware.ISpiPeripheral, System.IDisposable, Meadow.Peripherals.Displays.IPixelDisplay, Meadow.Peripherals.Displays.IDisplay, Meadow.Peripherals.Displays.IPixelBuffer

Properties

DeviceCount

Number of cascaded devices

View Source
Declaration
public int DeviceCount { get; }

DigitRows

Number of rows when representing digits

View Source
Declaration
public int DigitRows { get; }

DigitColumns

Number of columns when representing digits

View Source
Declaration
public int DigitColumns { get; }

Length

Gets the total number of digits (cascaded devices * num digits)

View Source
Declaration
public int Length { get; }

DefaultSpiBusSpeed

The default SPI bus speed for the device

View Source
Declaration
public Frequency DefaultSpiBusSpeed { get; }

SpiBusSpeed

The SPI bus speed for the device

View Source
Declaration
public Frequency SpiBusSpeed { get; set; }

DefaultSpiBusMode

The default SPI bus mode for the device

View Source
Declaration
public SpiClockConfiguration.Mode DefaultSpiBusMode { get; }

SpiBusMode

The SPI bus mode for the device

View Source
Declaration
public SpiClockConfiguration.Mode SpiBusMode { get; set; }

IsDisposed

Is the object disposed

View Source
Declaration
public bool IsDisposed { get; }

ColorMode

The currently set color mode for the display

View Source
Declaration
public ColorMode ColorMode { get; }

SupportedColorModes

The Color mode supported by the display

View Source
Declaration
public ColorMode SupportedColorModes { get; }

Width

Width of the display in pixels

View Source
Declaration
public int Width { get; }

Height

Height of the display in pixels

View Source
Declaration
public int Height { get; }

PixelBuffer

Provide a buffer that matches this display's color depth, height, and width This should be the buffer that is sent to the device when Show is called

View Source
Declaration
public IPixelBuffer PixelBuffer { get; }

BitDepth

The bit depth of the display

View Source
Declaration
public int BitDepth { get; }

ByteCount

The total bytes used for the display buffer

View Source
Declaration
public int ByteCount { get; }

Buffer

The backing buffer for the pixel buffer (not implemented)

View Source
Declaration
public byte[] Buffer { get; }

Fields

DigitsPerDevice

Number of digits per Module

View Source
Declaration
public const int DigitsPerDevice = 8

spiComms

SPI Communication bus used to communicate with the peripheral

View Source
Declaration
protected ISpiCommunications spiComms

Methods

SetNumber(int, int)

Set number to display (left aligned)

View Source
Declaration
public void SetNumber(int value, int deviceId = 0)
Parameters
TypeNameDescription
System.Int32valuethe number to display
System.Int32deviceIdthe cascaded device id
Exceptions

System.ArgumentOutOfRangeException

SetCharacter(CharacterType, int, bool, int)

Set a single character

View Source
Declaration
public void SetCharacter(Max7219.CharacterType character, int digit, bool showDecimal = false, int deviceId = 0)
Parameters
TypeNameDescription
Meadow.Foundation.Displays.Max7219.CharacterTypecharacterthe character to display
System.Int32digitthe digit index starting from the left
System.BooleanshowDecimalshow the decimal with the character
System.Int32deviceIdthe cascaded device id

GetCharacter(int, int)

Get the stored character

View Source
Declaration
public Max7219.CharacterType GetCharacter(int digit, int deviceId = 0)
Returns

Meadow.Foundation.Displays.Max7219.CharacterType

Parameters
TypeNameDescription
System.Int32digitthe digit index of the character
System.Int32deviceIdthe cascaded device id

TestDisplay(TimeSpan)

Helper test method - will turn all leds on then off

View Source
Declaration
public void TestDisplay(TimeSpan time)
Parameters
TypeNameDescription
System.TimeSpantimetime to show leds

SetMode(Max7219Mode)

Set the display mode of the Max7219

View Source
Declaration
public void SetMode(Max7219.Max7219Mode maxMode)
Parameters
TypeNameDescription
Meadow.Foundation.Displays.Max7219.Max7219ModemaxModethe mode

SetBrightness(int, int)

Sets the brightness for a specific device

View Source
Declaration
public void SetBrightness(int intensity, int deviceId)
Parameters
TypeNameDescription
System.Int32intensityintensity level ranging from 0..15.
System.Int32deviceIdindex of cascaded device.

SetBrightness(int)

Sets the brightness of all cascaded devices to the same intensity level.

View Source
Declaration
public void SetBrightness(int intensity)
Parameters
TypeNameDescription
System.Int32intensityintensity level ranging from 0..15.

SetDigit(byte, int, int)

Set a number at a specific position

View Source
Declaration
public void SetDigit(byte value, int digit, int deviceId = 0)
Parameters
TypeNameDescription
System.Bytevaluethe value to display
System.Int32digitthe digit index
System.Int32deviceIdthe cascaded device id

GetDigit(int, int)

Get the number at a specific position

View Source
Declaration
public int GetDigit(int digit, int deviceId = 0)
Returns

System.Int32

Parameters
TypeNameDescription
System.Int32digitthe digit index
System.Int32deviceIdthe cascaded device id

Show()

Writes all the Values to the devices.

View Source
Declaration
public void Show()

WriteBuffer(byte[,])

Writes a two dimensional buffer containing all the values to the devices.

View Source
Declaration
public void WriteBuffer(byte[,] buffer)
Parameters
TypeName
System.Byte[,]buffer

Clear(int, int)

Clears the buffer from the given start to end (exclusive) and flushes

View Source
Declaration
public void Clear(int start, int end)
Parameters
TypeName
System.Int32start
System.Int32end

Dispose()

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.

View Source
Declaration
public void Dispose()

Dispose(bool)

Dispose of the object

View Source
Declaration
protected virtual void Dispose(bool disposing)
Parameters
TypeNameDescription
System.BooleandisposingIs disposing

Show(int, int, int, int)

Partial screen update

View Source
Declaration
public void Show(int left, int top, int right, int bottom)
Parameters
TypeName
System.Int32left
System.Int32top
System.Int32right
System.Int32bottom

Clear()

Clear the display buffer

View Source
Declaration
public void Clear()

Clear(bool)

Clears the buffer from the given start to end and flushes

View Source
Declaration
public void Clear(bool updateDisplay = false)
Parameters
TypeName
System.BooleanupdateDisplay

DrawPixel(int, int, Color)

Draw pixel at location

View Source
Declaration
public void DrawPixel(int x, int y, Color color)
Parameters
TypeNameDescription
System.Int32xx position
System.Int32yy position
Meadow.Colorcolorcolor of pixel - converted to on/off

DrawPixel(int, int, bool)

Draw pixel at location

View Source
Declaration
public void DrawPixel(int x, int y, bool enabled)
Parameters
TypeNameDescription
System.Int32xx position in pixels
System.Int32yy position in pixels
System.BooleanenabledTrue = turn on pixel, false = turn off pixel

InvertPixel(int, int)

Invert pixel at location (toggle on/off)

View Source
Declaration
public void InvertPixel(int x, int y)
Parameters
TypeNameDescription
System.Int32xx position in pixels
System.Int32yy position in pixels

Fill(Color, bool)

Fill with color

View Source
Declaration
public void Fill(Color fillColor, bool updateDisplay = false)
Parameters
TypeNameDescription
Meadow.ColorfillColorcolor - converted to on/off
System.BooleanupdateDisplayshould refresh display

Fill(int, int, int, int, Color)

Fill region with color

View Source
Declaration
public void Fill(int x, int y, int width, int height, Color fillColor)
Parameters
TypeNameDescription
System.Int32xx position
System.Int32yy position
System.Int32widthwidth of region
System.Int32heightheight of region
Meadow.ColorfillColorcolor - converted to on/off

WriteBuffer(int, int, IPixelBuffer)

Draw buffer at location

View Source
Declaration
public void WriteBuffer(int x, int y, IPixelBuffer displayBuffer)
Parameters
TypeNameDescription
System.Int32xx position in pixels
System.Int32yy position in pixels
Meadow.Peripherals.Displays.IPixelBufferdisplayBufferbuffer to draw

Fill(Color)

Fill the display with a normalized color to on/off

View Source
Declaration
public void Fill(Color color)
Parameters
TypeNameDescription
Meadow.ColorcolorThe color to fill

GetPixel(int, int)

Get the Color of the pixel at a location (not implemented)

View Source
Declaration
public Color GetPixel(int x, int y)
Returns

Meadow.Color: The pixel color

Parameters
TypeNameDescription
System.Int32xThe x position in pixels
System.Int32yThe y position in pixels
Exceptions

System.NotImplementedException

SetPixel(int, int, Color)

Set a pixel at a specific location

View Source
Declaration
public void SetPixel(int x, int y, Color color)
Parameters
TypeNameDescription
System.Int32xThe x position in pixels
System.Int32yThe y position in pixels
Meadow.ColorcolorThe pixel color normalized to on/off

Implements

  • Meadow.Hardware.ISpiPeripheral
  • System.IDisposable
  • Meadow.Peripherals.Displays.IPixelDisplay
  • Meadow.Peripherals.Displays.IDisplay
  • Meadow.Peripherals.Displays.IPixelBuffer