The Adafruit Feather RP2040 with DVI is a microcontroller board capable of DVI digital video output on an HDMI port. That it is possible for a general-purpose microcontroller to generate a DVI signal is impressive, but it requires running the RP2040 beyond its limits.
When the Raspberry Pi Foundation introduced its RP2040 microcontroller, one standout feature was the Programmable IO (PIO) peripheral. You can think of the PIO as being a lot like the built-in SPI or UART serial communication peripherals found on most microcontrollers except this one is programmable in its own assembly language. This allows the PIO peripheral to be whatever serial (or parallel) communications interface you want it to be. Since its introduction, hackers have been pushing the PIO to its limits, including producing analog VGA video output. Taking it a step further, the PicoDVI project proved it was possible to generate digital video directly from the RP2040 without using an additional chip. Now Adafruit has packaged all the hardware needed to get DVI output from an RP2040 in a feather-sized board and wrapped the PicoDVI project code into an Arduino IDE library.
DVI is interoperable with HDMI monitors, so the output port is a standard full-sized HDMI port. Programming and power can be delivered via a USB-C port. In addition, the Feather RP2040 DVI has everything we’ve come to expect from Feather form-factor boards, including a battery connector and battery management circuit, a Stemma QT port for connecting I2C-based peripherals, and a status LED. The RP2040 relies on external flash storage and Adafruit has included 8 MB on board.
The PicoDVI library uses a lot of the RP2040’s resources. The RP2040 is a dual-core Arm Cortex M0+ clocked at 133MHz. Using the PicoDVI library consumes one of the two cores and does so at overclocked speeds. Adafruit makes no promises that this will not shorten the life of the RP2040, but the results have been reliable enough to support making the product. The RP2040 has 264kB of SRAM and the PicoDVI library uses 150kB of it at 320×240 resolution. The library also uses both on-chip PIO peripherals, so they are unavailable for other tasks.
The board is programmable in the Arduino IDE, CircuitPython, and the Raspberry Pi Pico SDK. Adafruit notes that the CircuitPython library uses up more resources than the other options, so we decided not to test it. Adafruit’s guide is focused on using Arduino IDE and following it makes getting up and running pretty simple. To start, you will need to follow a side path to add an additional board manager URL and then install the third-party board definitions via the board manager. I suggest following those instructions through uploading the Fade example, which will make sure you are able to upload programs to the board.
It’s then easy to install the PicoDVI – Adafruit Fork library via the library manager. To get you up and running quickly, there are example programs under the File -> Examples -> PicoDVI menu. I started with the 16bit_hello example with mixed success. I was able to get video out to an HDTV via HDMI, but could not find a picture setting that would get all of the image displayed on the screen. This is a known issue as there are no guarantees that the timings produced by the PicoDVI project code will be acceptable to your particular monitor or TV. There are example programs in 8-bit color and in monochrome, but these won’t help with the timing issue. All examples use the Adafruit GFX graphics library to draw shapes and set text. This library should be automatically installed for you.
With the capabilities of this board, you can certainly make interactive video toys like the Video Synth described on Adafruit’s website, and simple video games drawn from lines and polygons are not out of the question.
- DVI from a microcontroller