Brace yourself - MBN can do the FT80x Display natively

:whistle:

Here is a preview of what is cooking at MBN :

Of course, it is using standard NETMF bitmap methods. But we are adding some more goodies to use the FT800 built-in features at the same time, hence the clock on the upper right and the big font on the left.

11 Likes

Someone is enjoying these displays. Good work.

Thank you, Gus !

Ahhhh, FT80x… Such a promising hardware, and such a messy API…

Indeed :wall:

1 Like

I have missed EVE for NETMF, and of course MBN breaks the wall :wink:

Here are some news about this support.

It is now about 80% complete (only a few primitives and different other touch functions are missing) :

The first demo is only using FT800 primitives. You can see :

  • a slider that is changing the backlight PWM
  • a scrollbar that is displaying its current value
  • two buttons
  • a little keyboard that is building a string. If the string equals to “ABCDE”, it repaints the background with a new gradient

The second demo is a mix of FT800 primitives and standard NETMF graphics (bitmaps) :

  • the text “Available memory” is a NETMF bitmap
  • the butterfly is a NETMF bitmap
  • the gauge is a FT800 primitive
  • the upper moving square is a FT800 primitive with a gradient
  • the lower one is the same but is a NETMF bitmap
  • the clock is a NETMF bitmap
  • the three texts are FT800 primitives

I did not put any touch action on this second demo but it could have been entirely possible, of course.

As you can see, all this is running smoothly and flawlessly together

An empty program with the MBN Core, the native drivers and the standard NETMF assemblies (SPOT.Hardware, SPOT.Native and mscorlib) referenced is showing 166.716 bytes free at startup on the Quail.

5 Likes

Here are some news of the latest features that will soon be available.

You can now load and display pictures from an USB stick :

The video is showing RGB565 pictures but you can load ARGB1555 pictures as well. See attached picture with the dice. EDIT: the dice have transparency around them and the picture is loaded on top of a fullscreen gradient drawn before.

And of course, as usual with our native drivers btw, you can use up to four FT800 displays simultaneously. The second attached picture is showing a ConnectEVE board and a EVE Click board used together.
Both displays show different things and mix both FT800 primitives and NETMF graphics.

And usage is really simple :

using MBN;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using Microsoft.SPOT.Presentation.Media;
using MikroBusNet.Hardware;
using MFT = MikroBusNet.Hardware.MBNDisplay.FT800;

namespace TwoFT800
{
    public class Program
    {
        private static OutputPort _an = new OutputPort(Hardware.SocketTwo.An,false);
        private static readonly Font FontNinaB = Resources.GetFont(Resources.FontResources.NinaB);
        private static readonly Bitmap Bmp1 = new Bitmap(64,64);
        private static readonly Bitmap Bmp2 = new Bitmap(128, 64);

        public static void Main()
        {
            MBNDisplay.Populate(Hardware.SocketOne, MBNDisplay.MBNDisplayTypes.FT800Q);
            MBNDisplay.Populate(Hardware.SocketTwo, MBNDisplay.MBNDisplayTypes.FT800Q);

            MBNDisplay.Select(Hardware.SocketOne);
            MBNDisplay.FT800.StartFrame(Hardware.SocketOne);

            MFT.ScissorXY(0, 0);
            MFT.ScissorSize(480, 272);
            MFT.Gradient(0, 0, 0xFF0000, 480, 272, 0x00FF00);
            MFT.ScissorXY(0, 0);
            MFT.ScissorSize(512, 512);

            MFT.SaveContext();
            MFT.ColorRGB(0,0,0);
            MFT.Text(240, 136, 28, (int)MFT.Options.OPT_CENTER, "Free memory : " + Debug.GC(false).ToString("N0"));
            MFT.RestoreContext();
            MFT.BgColor(0x402000);
            MFT.Gauge(70, 200, 40, 0, 5, 4, 60, 100);

            Bmp1.Clear();
            Bmp1.DrawRectangle(ColorUtility.ColorFromRGB(255, 255, 255), 1, 0, 0, 64, 64, 0, 0,
                        Color.Black, 0, 0,
                        Color.Black, 0, 0, Bitmap.OpacityOpaque);
            Bmp1.DrawTextInRect("NETMF", 0, 20, Bmp1.Width, Bmp1.Height, Bitmap.DT_AlignmentCenter, ColorUtility.ColorFromRGB(128, 255, 255), FontNinaB);
            Bmp1.DrawTextInRect("BITMAP", 0, 40, Bmp1.Width, Bmp1.Height, Bitmap.DT_AlignmentCenter, ColorUtility.ColorFromRGB(128, 0, 255), FontNinaB);
            Bmp1.Flush(400,200,64,64);

            MFT.EndFrame(Hardware.SocketOne);

            MBNDisplay.Select(Hardware.SocketTwo);
            MBNDisplay.FT800.StartFrame(Hardware.SocketTwo);

            MFT.ScissorXY(0, 0);
            MFT.ScissorSize(480, 272);
            MFT.Gradient(0, 0, 0x000000, 0, 272, 0x0000FF);
            MFT.ScissorXY(0, 0);
            MFT.ScissorSize(512, 512);
            
            MFT.Text(240, 136, 28, (int)MFT.Options.OPT_CENTER, "Free memory : " + Debug.GC(false).ToString("N0"));
            MFT.Clock(400, 64, 64, 0, 4, 45, 32, 0);

            Bmp2.Clear();
            Bmp2.DrawRectangle(ColorUtility.ColorFromRGB(0, 255, 255), 1, 0, 0, 128, 64, 0, 0,
                        0, 0, 0,
                        0, 0, 0, Bitmap.OpacityOpaque);
            Bmp2.DrawTextInRect("NETMF Bitmap", 0, 30, Bmp2.Width, Bmp2.Height, Bitmap.DT_AlignmentCenter, ColorUtility.ColorFromRGB(128, 255, 255), FontNinaB);
            Bmp2.Flush(10,200,128,64);

            MFT.EndFrame(Hardware.SocketTwo);

            Thread.Sleep(Timeout.Infinite);
        }

    }
}

We are currently polishing the code and we hope the new firmware (the one that includes support for FT800) to be available before the end of the month.

4 Likes

Some (good) news : we have finally published our first beta version of the firmware with native support for the FTDI FT800 controller. For information, the previous firmware included native support for ILI9341, ST7735, ST7565, SEPS114A and ILI9163 based displays.

You can find more information on our forum about this release : http://mikrobusnet.org/bb/index.php/board,17.0.html
As you will see, we have put some small tutorials as well. They demonstrate how to use this controller with NETMF.

We also wanted to keep the memory footprint minimal and with 165 KB free for user’s application at startup, I think that we have achieved our goal.

We will post the last tuto in the next week. It will demonstrate things like loading/displaying pictures from NETMF resources or external sources. This will show how to do things like this :

or this :

7 Likes

Received in email :

Yes, they are compatible. In fact, those are MikroBUS headers, designed to host MikroElektronika Click boards. So, although not identified as MikroBus header on the BrainPad PCB ( :whistle: ), both are identical and as such can receive and use Click boards the same way.

If you did not see them before, we have many managed drivers for Click boards and Gadgeteer boards here : http://www.mikrobusnet.org/downloads

1 Like

@ Bec a Fuel - amazing work. It’s reminding me of the good old demo days.