Remarks

Mcp23s08
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.ICs.IOExpanders.Mcp23xxx

Code Example

Mcp23s08 mcp;

public override Task Initialize()
{
    IDigitalInputPort interruptPort = Device.CreateDigitalInputPort(Device.Pins.D00, InterruptMode.EdgeRising);
    IDigitalOutputPort chipSelectPort = Device.CreateDigitalOutputPort(Device.Pins.D01);
    IDigitalOutputPort resetPort = Device.CreateDigitalOutputPort(Device.Pins.D02);

    mcp = new Mcp23s08(Device.CreateSpiBus(), chipSelectPort, interruptPort, resetPort);

    return base.Initialize();
}

public override Task Run()
{
    while (true)
    {
        TestBulkDigitalOutputPortWrites(20);
        TestDigitalOutputPorts(2);
    }
}

void TestDigitalOutputPorts(int loopCount)
{
    var out00 = mcp.CreateDigitalOutputPort(mcp.Pins.GP0);
    var out01 = mcp.CreateDigitalOutputPort(mcp.Pins.GP1);
    var out02 = mcp.CreateDigitalOutputPort(mcp.Pins.GP2);
    var out03 = mcp.CreateDigitalOutputPort(mcp.Pins.GP3);
    var out04 = mcp.CreateDigitalOutputPort(mcp.Pins.GP4);
    var out05 = mcp.CreateDigitalOutputPort(mcp.Pins.GP5);
    var out06 = mcp.CreateDigitalOutputPort(mcp.Pins.GP6);
    var out07 = mcp.CreateDigitalOutputPort(mcp.Pins.GP7);

    var outputPorts = new List<IDigitalOutputPort>() 
    {
        out00, out01, out02, out03, out04, out05, out06, out07
    };

    foreach (var outputPort in outputPorts)
    {
        outputPort.State = true;
    }

    for(int l = 0; l < loopCount; l++) 
    {
        // loop through all the outputs
        for (int i = 0; i < outputPorts.Count; i++) 
        {
            // turn them all off
            foreach (var outputPort in outputPorts) 
            {
                outputPort.State = false; 
            }

            // turn on just one
            outputPorts[i].State = true;
            Thread.Sleep(250);
        }
    }

    // cleanup
    for (int i = 0; i < outputPorts.Count; i++) 
    {
        outputPorts[i].Dispose();
    }
}

void TestBulkDigitalOutputPortWrites(int loopCount)
{
    byte mask = 0x0;

    for (int l = 0; l < loopCount; l++) 
    {
        for (int i = 0; i < 8; i++) 
        {
            mcp.WriteToPorts(mask);
            mask = (byte)(1 << i);
            Thread.Sleep(5);
        }
    }
}

Sample project(s) available on GitHub

Wiring Example

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

Mcp23s08 Meadow Pin
GND GND
VCC 3V3
SCL D08 (SCL Pin)
SDA D07 (SDA Pin)
Characteristic Locus
Inheritance System.Object Mcp23xxx Mcp23x0x > Mcp23s08
Inherited Members Mcp23x0x.Pins Mcp23x0x.NumberOfPins Mcp23x0x.IsValidPin(IPin) Mcp23x0x.GetPin(String) Mcp23xxx.GetAddressFromPins(Boolean, Boolean, Boolean) Mcp23xxx.InputChanged Mcp23xxx._lock Mcp23xxx.ResetMcp() Mcp23xxx.Initialize() Mcp23xxx.CreateDigitalOutputPort(IPin, Boolean, OutputType) Mcp23xxx.CreateDigitalInputPort(IPin) Mcp23xxx.CreateDigitalInputPort(IPin, InterruptMode, ResistorMode) Mcp23xxx.CreateDigitalInputPort(IPin, InterruptMode, ResistorMode, TimeSpan) Mcp23xxx.CreateDigitalInputPort(IPin, InterruptMode, ResistorMode, TimeSpan, TimeSpan) Mcp23xxx.SetPortDirection(IPin, PortDirectionType) Mcp23xxx.WriteToPort(IPin, Boolean) Mcp23xxx.ReadPort(IPin) Mcp23xxx.WriteToPorts(Byte) Mcp23xxx.ReadFromPorts(Mcp23xxx.PortBank) Mcp23xxx.ResetPin(IPin)
Namespace Meadow.Foundation.ICs.IOExpanders
Assembly Mcp23xxx.dll

Syntax

public class Mcp23s08 : Mcp23x0x

Constructors

Mcp23s08(ISpiBus, IDigitalOutputPort, IDigitalInputPort, IDigitalOutputPort)

Creates an Mcp23s08 object

Declaration
public Mcp23s08(ISpiBus spiBus, IDigitalOutputPort chipSelectPort, IDigitalInputPort interruptPort = null, IDigitalOutputPort resetPort = null)

Parameters

Type Name Description
ISpiBus spiBus

The SPI bus

IDigitalOutputPort chipSelectPort

Chip select port

IDigitalInputPort interruptPort

optional interupt port, needed for input interrupts

IDigitalOutputPort resetPort

Optional Meadow output port used to reset the mcp expander

Mcp23s08(ISpiBus, IPin, IPin)

Creates an Mcp23s08 object

Declaration
public Mcp23s08(ISpiBus spiBus, IPin chipSelectPin, IPin interruptPin = null)

Parameters

Type Name Description
ISpiBus spiBus

The SPI bus

IPin chipSelectPin

Chip select pin

IPin interruptPin

optional interupt pin, needed for input interrupts (InterruptMode: EdgeRising, ResistorMode.InternalPullDown)