HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
Wren6991
PicoDVI
C2021–2026
Wren6991 / PicoDVI

PicoDVI

Bitbanged DVI on the RP2040 Microcontroller

25Distinct people
30Mentions
0Explicit recommenders
1.5KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Bitbanged DVI on the RP2040 Microcontroller

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year30 dated mentions

Observed mentions: 2021-01-21 12:43:07 UTC to 2026-07-12 01:05:08 UTC.

02468102021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 9 mentions; 2 submissions, 7 comments20212022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 7 mentions; 3 submissions, 4 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments20232024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 7 mentions; 1 submissions, 6 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC927
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC734
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC404
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC716
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC101
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC202

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
RP2350 PicoDVI Preview Changes from the public GitHub version: All Arm assembly in libdvi has been ported to RISC-V and tuned for Hazard3 Some of the existing Arm assembly in libdvi has been tweaked for better performance on Cortex-M33 RGB encode now uses the SIO TMDS encoders by default on RP2350 (can be disabled by defining DVI_USE_SIO_TMDS_ENCODE=0 -- see software/libdvi/dvi_config_defs.h) Much of the Arm assembly in libsprite has been ported to RISC-V -- enough to run the stock demos Build instructions: cd software mkdir build # PICO_PLATFORM can also be rp2350-riscv # List of DVI configs is in software/include/common_dvi_pin_configs.h cmake -DPICO_SDK_PATH=/path/to/sdk -DPICO_PLATFORM=rp2350 -DPICO_COPY_TO_RAM=1 -DDVI_DEFAULT_SERIAL_CONFIG=pico_sock_cfg .. make -j$(nproc) # Then flash a binary, e.g.: cp apps/tiles_and_sprites/tiles_and_sprites.uf2 If you plan to run the vista demo, then note that there are now two UF2 data files, software/assets/vista_data_rp2040.uf2 and software/assets/vista_data_rp2350.uf2. The only difference is the family IDs: the first can be dragged on RP2040 and on RP2350 A0, and the second can be dragged on RP2350 A1 and later. The following is the original RP2040 writeup: Bitbanged DVI on the RP2040 Microcontroller 640x480 RGB565 image, 640x480p 60 Hz DVI mode. 264 kB SRAM, 2x Cortex-M0+, system clock 252 MHz Quick links: Board Schematic Software Readme and Example Photos About this Project This project stems from a stupid idea I had during RP2040 bringup. I couldn't convince myself the idea was too stupid to work, so I took a leap of faith on it, and the results are documented here. RP2040 was designed to run at 133 MHz, but we found (without too much surprise) that typical silicon can be pushed further. In fact, there was overlap between the maximum system clock, and the TMDS bit clocks of slower DVI video modes. We had done great stuff with VGA on the FPGA platform, which ran at 48 MHz, but wouldn't it be absurd and wonderful to connect your microcontroller straight to an HD TV with no other electronics in between? This seemed unlikely to work out, but I stayed up at night playing around with assembly loops, and I could not convince myself that DVI was out of reach. Everything seemed to fit: With some of the core-local hardware on RP2040, and a neat encoding trick, I could do pixel-doubled TMDS encode on-the-fly using around 60% of an M0+ (running at 252 MHz, for 640x480p 60 Hz DVI) PIO can yeet out data streams at system clock frequency, and drive a 1/10th rate clock on the side, with pretty minimal programming Some of the DMA features are help with putting together the sync/blanking patterns on the fly, rather than having the patterns flat in memory With the second processor utterly unencumbered, you can render some pretty graphics to put on your DVI display. There is even enough RAM for a QVGA framebuffer! The greatest unknown was driving 252 Mbps serial through the general-purpose digital pads (especially differential serial, emulated with two single-ended pads). By this point I was utterly driven and consumed by the need to find out if DVI could work, so I laid out a board over a few evenings after work. The Rev A board uses a slightly cursed coupling circuit I first saw (and used) on the ULX3S FPGA board, which just connects 3V3 IOs straight into the HDMI socket through some coupling caps. Those who understand the TMDS physical layer are probably screaming, but I was fine, because I did not read the electrical section of the spec until after I got this board working. Then I screamed. Before the boards arrived I did some debugging, with these two strategies: Run the entire system at 12 MHz (crystal freq), so that the signals are probeable, but the relative speed of IO, DMA and CPUs is the same. This makes sure my code can keep the PIO state machines fed with data Swap in an alternate PIO program which outputs 10 bit UART data frames instead of direct serial (a 17% drop in throughput). I could then dump the TMDS stream with a logic analyser, and examine and parse it on my machine I also tried out my slightly harebrained TMDS encoding scheme, which matches the letter but not the spirit of the DVI specification, on an FPGA board with some DVI gateware I wrote for a previous weekend project. This confirmed that the principle was sound, and that my TV and monitor would have no trouble with the output of the matching software encoder on RP2040, provided the chip could physically shove bits out of the pins fast enough. Because this is a home project, I didn't touch the HDL sim, and stuck to ARM debug, UART and logic analyser for my debugging. This worked some kinks out of the software, and bringup of the freshly-soldered board was smooth. After swapping the blue and red lanes into the right order -- to which I will say, in my defense, I consistently thought the blue+sync lane was lane 2 -- I had a clean RGB565 QVGA 60 Hz static image on my monitor. Improved Output Circuit After reading the TMDS electrical section of the DVI spec, and staring quietly out the window for a while, wondering how this board ever worked, I rethought the output circuit. Eight capacitors was clearly not the way to go -- what I really needed was eight resistors. That's what I call a DVI PHY. I also revised my earlier approach of "turn all the GPIOs up to 11", and reduced the pad drive and slew. At work on Monday, a colleague agreed it would be a great idea to plug my microcontroller monstrosity into the scope setup we use for 4k HDMI testing. Here are the results at VGA 60 Hz (252 Mbps): I was sitting on the other side of the lab while he was running the test, and when the eye mask appeared he just said "do you wanna see something funny". A clean bill of health! We also tried 720p30 (372 Mbps), which requires overvoltage on typical silicon (something you can do with one register write on RP2040): Honestly, this has shaken me. This is a silly amount of bandwidth for a t
Read the full README on GitHub

What Hacker News says

30 sources
Wren6991/PicoDVI commit history: https://github.com/Wren6991/PicoDVI/commits/master/ : > Add 720x480p 60Hz mode (270 MHz bit clock) > RP2350 changes (including RISC-V) From https://news.ycombinator.com/item?id=41260679 : > The new HSTX interface on the RP2350 seems to be squarely targeted at this use case (video output) and doesn't require the use of PIO or consuming a ton of CPU cycles. There's a nice write up on the capability here:
In Show HN: TinyCity – A tiny city SIM for MicroPython (Thumby micro console)
RO2040 isn’t slow - it’s literally one of the fastest on the market. It’s a dual core microcontroller that can easily run both cores at 133-250+ MHz. https://github.com/Wren6991/PicoDVI The GPIO on RPi is not very useful for precision work and you’re limited to using SPI (usually to talk to an auxiliary microcontroller). The GPIO on RP2040 is so good that you can use it as 24 channel 100Msps logic analyzer in a pinch. https://github.com/gusmanb/logicanalyzer
In Intel N100 Radxa X4 First Thoughts
The RP2040 is a great MCU for playing with graphics as it can bit bang VGA and DVI/HDMI. There's some info on the DVI here: https://github.com/Wren6991/PicoDVI I wrote a couple of articles on how to do bit banged VGA on the RP2040 from scratch: https://gregchadwick.co.uk/blog/playing-with-the-pico-pt5/ and https://gregchadwick.co.uk/blog/playing-with-the-pico-pt6/ plus an intro to PIO https://gregchadwick.co.uk/blog/playing-with-the-pico-pt4/
In FuryGpu – Custom PCIe FPGA GPU
I have the Adafruit DVI board and have been hacking on it some. It's more fun than should be allowed. There's a project to get this running using Rust[1]. Currently it outputs the blue channel with sync, but has trouble with the other two channels. I don't have a hardware lab with scope, logic analyzer, etc., so it's not easy for me to debug. In the meantime, I've been doing some experiments in the C codebase as well[2], mostly in the direction of proportionally spaced bitmap text, using the fonts in the X11 distribution. [1]: https://github.com/DusterTheFirst/pico-dvi-rs [2]: https://github.com/Wren6991/PicoDVI/pull/48
In VGA driver using PIO and DMA on the RP2040
A TMDS symbol is 10 bits long so a pixel clock of 25Mhz needs a DVI bitrate of 250Mhz. You can generate DVI with an overclocked RP2040[1], but even then you have to halve the horizontal resolution because the general TMDS encoding algorithm is expensive to perform in software. You could, however, replace the VGA resistor DAC with a dedicated DVI encoder IC like the TFP401. [1] https://github.com/Wren6991/PicoDVI
In Show HN: PicoVGA Library – VGA/TV Display on Raspberry Pi Pico

Showing the 15 most recent of 30 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.