Problem with FEZ Flea and WS2812 library

Hello,

I use an FEZ Flea to control 7 WS2812B Leds and use the GHIElectronics.TinyCLR.Drivers.Worldsemi.WS2812 library.

When i run the following program

const int NumLed = 7;
private static int FTime = 2000;
static GpioController gpio = GpioController.GetDefault();
static GpioPin pin = gpio.OpenPin(FEZFlea.GpioPin.PA3);
static WS2812Controller leds = new WS2812Controller(pin, NumLed, WS2812Controller.DataFormat.rgb888);
static void Main()
{
    while (true)
    {
        leds.SetColor(0, 0xFF, 0, 0);       
        leds.SetColor(1, 0, 0xFF, 0);       
        leds.SetColor(2, 0, 0, 0xFF);       
        leds.SetColor(3, 0, 0xFF, 0xFF);
        leds.SetColor(4, 0xFF, 0, 0xFF);    
        leds.SetColor(5, 0xFF, 0xFF, 0);    
        leds.SetColor(6, 0x80, 0x80, 0x80);
        leds.Flush();
        Thread.Sleep(FTime);

        leds.SetColor(0, 0xFF, 0xFF, 0);
        leds.SetColor(1, 0xFF, 0, 0);
        leds.SetColor(2, 0, 0xFF, 0);
        leds.SetColor(3, 0, 0, 0xFF);
        leds.SetColor(4, 0, 0xFF, 0xFF);
        leds.SetColor(5, 0xFF, 0, 0xFF);
        leds.Flush();
        Thread.Sleep(FTime);

        leds.SetColor(0, 0xFF, 0, 0xFF);
        leds.SetColor(1, 0xFF, 0xFF, 0);
        leds.SetColor(2, 0xFF, 0, 0);
        leds.SetColor(3, 0, 0xFF, 0);
        leds.SetColor(4, 0, 0, 0xFF);
        leds.SetColor(5, 0, 0xFF, 0xFF);
        leds.Flush();
        Thread.Sleep(FTime);

        leds.SetColor(0, 0, 0xFF, 0xFF);
        leds.SetColor(1, 0xFF, 0, 0xFF);
        leds.SetColor(2, 0xFF, 0xFF, 0);
        leds.SetColor(3, 0xFF, 0, 0);
        leds.SetColor(4, 0, 0xFF, 0);
        leds.SetColor(5, 0, 0, 0xFF);
        leds.Flush();
        Thread.Sleep(FTime);

        leds.SetColor(0, 0, 0, 0xFF);
        leds.SetColor(1, 0xFF, 0xFF, 0xFF);
        leds.SetColor(2, 0xFF, 0, 0xFF);
        leds.SetColor(3, 0xFF, 0xFF, 0);
        leds.SetColor(4, 0xFF, 0, 0);
        leds.SetColor(5, 0, 0xFF, 0);
        leds.Flush();
        Thread.Sleep(FTime);

        leds.SetColor(0, 0, 0xFF, 0);
        leds.SetColor(1, 0, 0, 0xFF);
        leds.SetColor(2, 0, 0xFF, 0xFF);
        leds.SetColor(3, 0xFF, 0, 0xFF);
        leds.SetColor(4, 0xFF, 0xFF, 0);
        leds.SetColor(5, 0xFF, 0, 0);
        leds.Flush();
        Thread.Sleep(FTime);
    }
}

I get the following error

Looking for a device on transport ‘USB’.
Found device port ‘USB’ with ID ‘988abf6a-59e6-4d25-8437-5e66ef983e64’ for transport ‘Usb’.
Starting device deployment.
Attempting to connect to device ‘USB:SC13048’: iteration 0.
Opening port ‘\?\usb#vid_1b9f&pid_5012#6&dbbffb&0&7#{c13bcfe9-5e84-4187-9baa-45597ffcbb6f}’.
Attaching debugger engine.
Debugger engine attached.
Generating device specific assemblies.
- TestWS2812 v1.0.0.0 with size 1.748 bytes at ‘D:\Users\Klaus\Qsync\ownCloud\TinyCLR\TinyCLR21Projekte_Testprojekte\TestWS2812\bin\Debug\pe\TestWS2812.pe’.
- mscorlib v2.1.0.0 with size 72.428 bytes at ‘D:\Users\Klaus\Qsync\ownCloud\TinyCLR\TinyCLR21Projekte_Testprojekte\TestWS2812\bin\Debug\pe\mscorlib.pe’.
- GHIElectronics.TinyCLR.Devices.Gpio v2.1.0.0 with size 4.828 bytes at ‘D:\Users\Klaus\Qsync\ownCloud\TinyCLR\TinyCLR21Projekte_Testprojekte\TestWS2812\bin\Debug\pe\GHIElectronics.TinyCLR.Devices.Gpio.pe’.
- GHIElectronics.TinyCLR.Drivers.Worldsemi.WS2812 v2.1.0.0 with size 1.312 bytes at ‘D:\Users\Klaus\Qsync\ownCloud\TinyCLR\TinyCLR21Projekte_Testprojekte\TestWS2812\bin\Debug\pe\GHIElectronics.TinyCLR.Drivers.Worldsemi.WS2812.pe’.
- GHIElectronics.TinyCLR.Native v2.1.0.0 with size 6.156 bytes at ‘D:\Users\Klaus\Qsync\ownCloud\TinyCLR\TinyCLR21Projekte_Testprojekte\TestWS2812\bin\Debug\pe\GHIElectronics.TinyCLR.Native.pe’.
Total deployment size is 86.472 bytes.
Incrementally deploying assemblies to the device:
Allocating assemblies:
- Address: 0x08047000 => mscorlib
- Address: 0x08058AEC => GHIElectronics.TinyCLR.Native
- Address: 0x0805A2F8 => GHIElectronics.TinyCLR.Devices.Gpio
- Address: 0x0805B5D4 => TestWS2812
- Address: 0x0805BCA8 => GHIElectronics.TinyCLR.Drivers.Worldsemi.WS2812
Deploying assemblies:
- Erasing sector 41 (2.048 bytes).
- Writing sector 41 (2.048 bytes).
- Erasing sector 42 (2.048 bytes).
- Writing sector 42 (2.048 bytes).
- Writing sector 43 (480 bytes).
Assemblies deployed. There are 137.784 bytes left in the deployment area.
Restarting interpreter.
Attaching to device.
Waiting for device to initialize.

Found debugger!

Create TS.

Loading Deployment Assemblies.

Attaching deployed file.

Assembly: mscorlib (2.1.0.0) Attaching deployed file.

Assembly: GHIElectronics.TinyCLR.Native (2.1.0.0) Attaching deployed file.

Assembly: GHIElectronics.TinyCLR.Devices.Gpio (2.1.0.0) Attaching deployed file.

Assembly: TestWS2812 (1.0.0.0) Resolving.

Link failure: some assembly references cannot be resolved!!

Assembly: TestWS2812 (1.0.0.0) needs assembly ‘GHIElectronics.TinyCLR.Drivers.Worldsemi.WS2812’ (2.1.0.0)

Error: a3000000

Waiting for debug commands…

Das Programm “[4] TinyCLR application: Verwaltet” wurde mit Code 0 (0x0) beendet.

If I change the program like this

then the program will run without errors.

const int NumLed = 7;
private static int FTime = 2000;
static GpioController gpio = GpioController.GetDefault();
static GpioPin pin = gpio.OpenPin(FEZFlea.GpioPin.PA3);
static WS2812Controller leds = new WS2812Controller(pin, NumLed, WS2812Controller.DataFormat.rgb888);
static void Main()
{
    while (true)
    {
        leds.SetColor(0, 0xFF, 0, 0);       
        leds.SetColor(1, 0, 0xFF, 0);       
        leds.SetColor(2, 0, 0, 0xFF);       
        leds.SetColor(3, 0, 0xFF, 0xFF);
        leds.SetColor(4, 0xFF, 0, 0xFF);    
        leds.SetColor(5, 0xFF, 0xFF, 0);    
        leds.SetColor(6, 0x80, 0x80, 0x80);
        leds.Flush();
        Thread.Sleep(FTime);

        leds.SetColor(0, 0xFF, 0xFF, 0);
        leds.SetColor(1, 0xFF, 0, 0);
        leds.SetColor(2, 0, 0xFF, 0);
        leds.SetColor(3, 0, 0, 0xFF);
        leds.SetColor(4, 0, 0xFF, 0xFF);
        leds.SetColor(5, 0xFF, 0, 0xFF);
        leds.Flush();
        Thread.Sleep(FTime);

        //leds.SetColor(0, 0xFF, 0, 0xFF);
        //leds.SetColor(1, 0xFF, 0xFF, 0);
        //leds.SetColor(2, 0xFF, 0, 0);
        //leds.SetColor(3, 0, 0xFF, 0);
        //leds.SetColor(4, 0, 0, 0xFF);
        //leds.SetColor(5, 0, 0xFF, 0xFF);
        //leds.Flush();
        //Thread.Sleep(FTime);

        leds.SetColor(0, 0, 0xFF, 0xFF);
        leds.SetColor(1, 0xFF, 0, 0xFF);
        leds.SetColor(2, 0xFF, 0xFF, 0);
        leds.SetColor(3, 0xFF, 0, 0);
        leds.SetColor(4, 0, 0xFF, 0);
        leds.SetColor(5, 0, 0, 0xFF);
        leds.Flush();
        Thread.Sleep(FTime);

        //leds.SetColor(0, 0, 0, 0xFF);
        //leds.SetColor(1, 0xFF, 0xFF, 0xFF);
        //leds.SetColor(2, 0xFF, 0, 0xFF);
        //leds.SetColor(3, 0xFF, 0xFF, 0);
        //leds.SetColor(4, 0xFF, 0, 0);
        //leds.SetColor(5, 0, 0xFF, 0);
        //leds.Flush();
        //Thread.Sleep(FTime);

        leds.SetColor(0, 0, 0xFF, 0);
        leds.SetColor(1, 0, 0, 0xFF);
        leds.SetColor(2, 0, 0xFF, 0xFF);
        leds.SetColor(3, 0xFF, 0, 0xFF);
        leds.SetColor(4, 0xFF, 0xFF, 0);
        leds.SetColor(5, 0xFF, 0, 0);
        leds.Flush();
        Thread.Sleep(FTime);
    }
}

At least 2 instruction blocks must be commented out.

What’s the problem here.

Thanks for your Ideas

Klaus

I have seen a strange thing like that happen before but can’t explain it.

The fix is easy, go to TinyCLR config and erase all… Then reload firmware and your app.

Hi Gus,
i’ am happy that it works.

Thank you and happy 2nd Advent

Klaus

If you manage to reproduce the issue, please share the steps with us

I did it exactly as described by you and it fit.

1 Like