VOOZH about

URL: https://www.nuget.org/packages/nanoFramework.Iot.Device.ShiftRegister/

⇱ NuGet Gallery | nanoFramework.Iot.Device.ShiftRegister 1.2.867




👁 Image
nanoFramework.Iot.Device.ShiftRegister 1.2.867

Prefix Reserved
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package nanoFramework.Iot.Device.ShiftRegister --version 1.2.867
 
 
NuGet\Install-Package nanoFramework.Iot.Device.ShiftRegister -Version 1.2.867
 
 
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="nanoFramework.Iot.Device.ShiftRegister" Version="1.2.867" />
 
 
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="nanoFramework.Iot.Device.ShiftRegister" Version="1.2.867" />
 
Directory.Packages.props
<PackageReference Include="nanoFramework.Iot.Device.ShiftRegister" />
 
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add nanoFramework.Iot.Device.ShiftRegister --version 1.2.867
 
 
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: nanoFramework.Iot.Device.ShiftRegister, 1.2.867"
 
 
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package nanoFramework.Iot.Device.ShiftRegister@1.2.867
 
 
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=nanoFramework.Iot.Device.ShiftRegister&version=1.2.867
 
Install as a Cake Addin
#tool nuget:?package=nanoFramework.Iot.Device.ShiftRegister&version=1.2.867
 
Install as a Cake Tool
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Generic shift register

A shift register enables controlling multiple devices, like LEDs, using a small number of pins (minimum of 3 -- data, data clock and register latch). Shift registers can be daisy-chained without requiring using additional pins, enabling addressing a large number of devices, limited only by current and the algorithms you use.

The binding abstracts the interaction with the storage register, the storage clock, the register clock and other shift register capabilities. This binding enables interaction via GPIO or SPI.

is used as the base class for and bindings. It can be used directly, or you can rely on it as an implementation detail of those more specific bindings. It has been tested with with SN74HC595, MBI5027, and MBI5168 shift registers.

The following image is of the popular SN74HC595 8-bit shift register:

👁 shift-register

The following image is of the larger MBI5027 16-bit shift register:

👁 MBI5027

The demonstrates how to use the shift register in some basic ways.

Using GPIO

The binding can use GpioController pins to control the shift register. It uses to describe the pins that will be used.

The following example code demonstrates how to use a shift register with GPIO.

ShiftRegister sr = new(ShiftRegisterPinMapping.Minimal, 8);

// Light up three of first four LEDs
sr.ShiftBit(1);
sr.ShiftBit(1);
sr.ShiftBit(0);
sr.ShiftBit(1);
sr.Latch();

// Display for 1s
Thread.Sleep(1000);

// Write to all 8 registers with a byte value
// ShiftByte latches data by default
sr.ShiftByte(0b_1000_1101);

The following demonstrates the required wiring for using the SN74HC595 with minimal mapping. Other shift registers will be similar.

Using SPI

Important: make sure you properly setup the SPI pins especially for ESP32 before creating the SpiDevice, make sure you install the nanoFramework.Hardware.ESP32 nuget:

//////////////////////////////////////////////////////////////////////
// when connecting to an ESP32 device, need to configure the SPI GPIOs
// used for the bus
Configuration.SetPinFunction(21, DeviceFunction.SPI1_MOSI);
Configuration.SetPinFunction(22, DeviceFunction.SPI1_MISO);
Configuration.SetPinFunction(23, DeviceFunction.SPI1_CLOCK);
// Make sure as well you are using the right chip select

For other devices like STM32, please make sure you're using the preset pins for the SPI bus you want to use. The chip select can as well be pre setup.

The bindings can use a SpiDevice to control the shift register. The shift register timing maps to the SPI protocol, enabling SPI to be used. The wiring from is straightforward, from SPI pins to the shift register: SDI (MOSI) → SDI; SCLK → CLK; CEO → LE.

Note: The SPI protocol has terms with casual references to slavery. We're doing our part to avoid them.

The following example code demonstrates how to use a shift register with SPI.

// assuming an 8-bit shift register
ShiftRegister sr = new(SpiDevice.Create(new(1, 42)), 8);

// Light up three of first four LEDs
// The ShiftBit() method is disallowed when using SPI
sr.ShiftByte(0b_1011);

// Clear register
sr.ShiftClear();

// Write to all 8 registers with a byte value
sr.ShiftByte(0b_1010_1010);

The following demonstrates the required wiring for using the SN74HC595 with SPI. Other shift registers will be similar.

Daisy-chaining

The binding supports daisy chaining, using either GPIO or SPI. The GPIO-based example below demonstrates how to instantiate the binding for controlling/addressing two -- daisy-chained -- 8-bit shift registers. This is specified by the integer value in the constructor.

ShiftRegister sr = new(ShiftRegisterPinMapping.Minimal, 16);

The shift registers need to be correctly wired to enable daisy-chaining. On the SN74HC595, QH' in the first register would connect to SER in the second register. The pattern with the MBI5027 and MBI5168 is similar, SDO in the first register would connect to SDI in the second.

You can write values across multiple daisy chained devices in one of several ways, as demonstrated in the following code. You wouldn't typically use of all these approaches, but pick one.

// Write a value to each register bit and latch
// Only works with GPIO
for (int i = 0; i < sr.BitLength; i++)
{
 sr.ShiftBit(1);
}
sr.Latch();

// Prints the following pattern to each register: 10101010
// This pattern only works for register lengths divisible by 8 (which is common)
for (int i = 0; i < sr.BitLength / 8; i++)
{
 sr.ShiftByte(0b_1010_1010);
}

// Downshift a 32-bit number to the desired number of daisy-chained devices
// Same thing could be done with a 64-bit integer if you have more than four 8-bit shift registers (or more than two 16-bit ones)
// Prints the following pattern across two registers: 0001001110001000
int value = 0b_0001_0011_1000_1000; // 5000
for (int i = (sr.BitLength / 8) - 1; i > 0; i--)
{
 int shift = i * 8;
 int downShiftedValue = value >> shift;
 sr.ShiftByte((byte)downShiftedValue, false);
}

sr.ShiftByte((byte)value);

// Print array of bytes
// Result will be same as previous example
var bytes = new byte[] { 0b10001000, 0b00010011};
foreach (var b in bytes)
{
 sr.ShiftByte(b);
}

The following demonstrates the required wiring for using the SN74HC595 with daisy-chaining. Other shift registers will be similar. This diagram uses the Minimal mapping. The Complete mapping will differ.

Resources

Product Versions Compatible and additional computed target framework versions.
.NET Framework net net is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on nanoFramework.Iot.Device.ShiftRegister:

Package Downloads
nanoFramework.Iot.Device.CharacterLcd

This package includes the .NET IoT Core binding Character LCD for .NET nanoFramework C# projects.

nanoFramework.Iot.Device.Sn74hc595

This package includes the .NET IoT Core binding Iot.Device.Sn74hc595 for .NET nanoFramework C# projects.

nanoFramework.Iot.Device.Mbi5027

This package includes the .NET IoT Core binding Iot.Device.Mbi5027 for .NET nanoFramework C# projects.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.0.0-preview.83 112 6/1/2026
2.0.0-preview.78 97 5/27/2026
2.0.0-preview.71 87 5/20/2026
2.0.0-preview.66 90 5/18/2026
2.0.0-preview.60 89 5/13/2026
2.0.0-preview.55 72 5/11/2026
2.0.0-preview.47 79 5/4/2026
2.0.0-preview.43 76 4/29/2026
2.0.0-preview.35 86 4/22/2026
2.0.0-preview.30 97 4/20/2026
2.0.0-preview.13 136 3/9/2026
2.0.0-preview.11 74 3/6/2026
1.2.867 2,957 4/2/2025
1.2.861 527 4/2/2025
1.2.850 694 3/10/2025
1.2.830 836 2/27/2025
1.2.817 1,031 2/26/2025
1.2.810 373 2/25/2025
1.2.780 759 2/4/2025
1.2.768 693 2/4/2025
Loading failed