VGA for Arduino Nano (Text Mode, 80×30, 64 Colors) 4

​

[VGA for Arduino Nano](https://reddit.com/link/11m2jez/video/m2z9hzvxujma1/player)

I recently did a build of an electronics project that aims to produce a text-mode VGA video adapter for the Arduino Nano. The output is standard VGA and will drive any monitor with a VGA input. The text is 80 columns x 30 rows, and can use 64 different colors for the foreground and background of each character. Arduino code can be written using an easy-to-use library.

The main device doing the VGA signal generation is a Lattice iCE40UP FPGA. All gateware for the FPGA is written in VHDL.

This build was a proof-of-concept build to make the VGA output and interfacing work. The project was also to refine the build techniques, including the KiCAD schematic and PCB design, stencil alignment tool and solder paste process, double-sided reflow process, and board cleaning process.

I will probably do another refinement of this project, concentrating on updating the following:

1. The interface currently is a parallel interface, this actually uses too many pins on the Arduino, so there needs to be additional work done to change the interface to SPI so that it uses only 4 pins.
The parallel interface might be an ideal interface for systems other than the Arduino, such as homebrew 8-bit PCs built around the 6502 or Z80.
2. The iCE40UP FPGA is just short of enough on-board memory to do a full 256-character set, so on this version I had to settle for a 128-character set. I want to use an iCE40HX-8K next time, which has enough on-board memory to make this happen.
3. The iCE40UP FPGA is in a QFP48 package, the iCE40HX-8K is in a BGA-121 package, so the next version of the project will pilot doing a BGA reflow.
4. This was done as a 2-layer PCB. The PCB will have to increase to 4 layers on the next version to accommodate the signal breakout of the BGA and to improve signal integrity with additional ground planes.
5. Change the Arduino to a Nano 33 IoT board. The existing Nano is 5V, which required level shifters because the iCE40 is 3.3V. The Nano 33 IoT is 3.3V native and will eliminate the need for level shifters.

This same video is available on YouTube at a higher resolution if you want to view it there: [https://www.youtube.com/watch?v=w48n_iEgdv4](https://www.youtube.com/watch?v=w48n_iEgdv4)

It is my intent to open-source this project, I’ll try to post back here and/or update the YouTube description with the link to the open-source archive when it’s ready.




View Reddit by Southern-Stay704View Source

4 Comments

  1. Great project. If you’re going after the SPI interface can you have a look at what Adafruit GXF library does? It already supports for multiple displays. It would be nice to be able to buy your board and use it with Adafruit GXF to draw to any VGA screen.

  2. Spi perhaps is slow. You can multiplex some data instead

  3. WOW

    I so i am not even sure how you managed to make VGA to work

    Also why did you not order a larger stencil and had both sides on it ? well maybe it was cheaper to have it in 2 parts.

    Also does it heat up?

    You mentioned that you need level shifters, why you didn’t go with a 3v3 MCU to begin with ?

Leave a Reply

Your email address will not be published. Required fields are marked *

SHOPPING CART

close