I would first like to state that I am primarily a software engineer. While I have spent 14ish hours researching this so far, I apologize in advance if I miss a core concept or use incorrect terminology. Feel free to correct me if I do!

I am currently working on an electrical generator that is run by an integrated main micro controller. Right now I am displaying the user interface with a simple display module over a serial connection, but it will eventually need to be able to connect to a commercial LCD monitor.

Most modern monitors have HDMI, DVI, and DisplayPort inputs. HDMI requires a royalty for it's use in a commercial project, so it's not an option.

Going forward I am working under a 4 component model.

Main micro ---> Frame Buffer ---> Display Controller ---> Monitor

I will have a main micro that writes 24bit RGB values to a frame buffer. The display controller will then pull a frame of those values, process them, and send them to the display.

Writing the values from the micro to the buffer will be no problem. It's from that point I am not sure how to proceed. When googling for display controllers online, I can find none that will output to DisplayPort or DVI on their own. Most of them have 24 outputs for each color bit as well as a few other important things for an LCD screen such as horizontal and vertical sync and a clock output. Page 731 on (http://ww1.microchip.com/downloads/en/DeviceDoc/DS60001476B.pdf) is a good example.

No where on the internet have I been able to find a way to put that sort of output on a DisplayPort or DVI wire so that it can connect to a normal display. I've found such little information that I fear I might be missing something very fundamental about one of these concepts.

Is there something I am missing, is this just not possible for some reason, or am I simply not searching the right terms?

At the end of the day, I really just need to get a frame of RGB values from a chunk of RAM onto a normal 720p monitor, so if anyone knows a better way to go about this then I would be happy to hear those suggestions as well.

  • \$\begingroup\$ If you are going from serial to DVI/HDMI you might use something like raspberry pi to do the conversion. On a pi it's pure software and you know how to do it. \$\endgroup\$ Aug 31, 2017 at 21:08
  • \$\begingroup\$ But if you really need it cheap, probably the way to go is convert serial to 24bit RGB plus HSync/VSync/DE/CLK via a small FPGA, and a small SRAM for frame buffer, then to DVI via a converter IC. \$\endgroup\$ Aug 31, 2017 at 21:11
  • \$\begingroup\$ I would also consider an old VGA, it might be easier to get implemented. \$\endgroup\$ Aug 31, 2017 at 21:34
  • \$\begingroup\$ Also if you can use LCD panels you might find ones with SPI interface. Those are usually smaller and lower resolutions (around 320x480, like cdn-shop.adafruit.com/datasheets/ILI9341.pdf). This will save you all the money around DVI interface all around (you don't even need to have DVI on the monitor side). \$\endgroup\$ Aug 31, 2017 at 22:28
  • \$\begingroup\$ Some display controllers are DVI comparable while not necessarily being DVI compatible. It might only be a matter of level shifting, take a closer look. \$\endgroup\$ Sep 1, 2017 at 15:45

2 Answers 2


Displayport/DVI/HDMI are pretty much variations on a theme (That theme being very fast LVDS signalling, think Gb/s on each pair), and if the micro does not have a suitable port directly, the usual answer is a small FPGA with some DDR to hold the frame buffer interfaced to the micro over some suitable interface. This is a pain in the arse if you do not do FPGAs as while it may look like programming, it is really not.

I would suggest that the smart approach for this sort of thing is to cheat, put an ethernet port on your machine and use a tablet/laptop/phone with a web browser as the interface for anything that you cannot run from a local SPI driven display. Something with a web browser is probably more readily available then a monitor, and you want ethernet anyway so you can do SNMP for status and control. Web development types are ten a penny compared to VHDL folks for video interfaces, and your micro probably already has a IP stack/web server/SNMP server ported to it.


This is not an easy task, especially for unspecified "a main micro" with a "frame buffer". To get a commercial display to work, you will need a DISPLAY CONTROLLER somehow attached to your "a main micro". The conroller is usually a sizable piece of hardware and carries a serious IP (Intellectual Property). The display can be embedded into "a micro", like in many SoC, or be connected externally.

Since your "a main micro" doesn't have the embedded HDMI/eDP/VGA port, the solution must be with external device. Unfortunately all controllers would require some super-fast interface like MIPI over a few differential pairs, which again is not likely within the pinout of your "a main micro".

Therefore there are two feasible options left:

  • to stream your frame buffer into USB port. The port must be at least USB2.0 HS capable, and operate in host mode. Then you can connect one of available USB-to-video bridges, UFX6000 IC, or similar ones from DisplayLink products. If your "a micro" doesn't have host USB2.0 HS capability, this is not an option.

  • to move your frame buffer into a display controller that uses fast SPI interface (dual or quad), like FTDI FT81X series of chips. enter image description here

Yet another alternative would be to stick with old VGA style, and use serial-to-VGA developments based on Parallax MCUs, there are still plenty of displays who take VGA as input. Or Google for "VGA display shield" for other variants.

In all cases it will require some heavy development of drivers on the side of "a main micro".


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.