Arduino HDMI Shield: bridging the gap between small MCUs and Full HD Monitors
With an Application Specific Integrated Circuit (ASIC), creating HDMI video signals for full HD monitors or HDTVs using a typical modern MCU is difficult but it is not an impossible task. For a resolution as high as 1080p, Full HD Monitors or High Definition Televisions require a pixel clock of 148MHz. To think that such pixel clock can be possible from a simple microcontroller seems unimaginable, but not so for Techtoys who has created an Arduino shield that creates an HDMI output from an SPI control input.
The HDMI shield, an Arduino compatible development board, and two Integrated Circuits give us an insight into how it creates graphics at this level; the RA8876 TFT controller, a full graphics engine and the HDMI encoder CH7035B. The TFT controller RA8876 produces digital RGB output in 8:8:8 format for the HDMI encoder CH7035B converts the RGB video to differential signals (TMDS), with its internal frame buffer that boosts the 8:8:8 RGB to full HD 1080P (1920 * 1080) at 60Hz max. This is particularly interesting because the RA8876 supports a variety of AP interfaces like 8080 16-bit, 4-wire SPI and I2C that should be able to talk to most microcontrollers. The RA8876 also makes it possible to avoid direct pixel rendering, writing simple commands (through the SPI) to define the window size and foreground color instead of writing individual pixels for the 1280 * 720 screen in 16 bit-per-pixel.
To display full-color pictures, the HDMI Shield uses a free conversion tool that exports binary files from jpeg/png/BMP images to a microSD card and later to the main window by 2D BitBlt in a flicker-free operation. The HDMI shield can also do more interesting things like font rendering from embedded characters, picture-in-picture, DMA transfer from Serial Flash to SDRAM and hardware-accelerated shape-draws.
As this board shows, the classic Arduino shield form factor, though may now be a little past its zenith, can still be relevant for some interesting new applications. However, it is important to note that the HDMI shield is a 3.3V system that stands the risk of being damaged if used with a 5V Arduino.
More information can be found on the shield’s GitHub project page.