Arduino Video Display Shield

An Arduino video display shield with integrated framebuffer and analog video output.

Similar projects worth following
This Arduino shield will make an end to your 1st project being an LED to be flashed. Now you are able to connect a display (which we are all hooked to anyways) and generate a virtual LED that is going to blink in every color you have ever dreamed of.
Now seriously, the Arduino family of compatible boards is lacking a solid hardware support option to display images, animations or video. This board provides an analog composite video display with integrated frame buffer memory accessible through SPI or parallel bus. It will not display 4K video but somebody will hack it to run Doom, Joust or Ultra-Cricket. PAL, NTSC and VGA output formats are supported, resolution is up to 640x480 with reduced color count.
Design data will be published once I have a working prototype, I believe open source can only win if a certain level of quality is present. There are too many projects of unknown state dumped into repositories all over the place.

The heart of this design is the VLSI VS23S010D-L chip. It is a 1 Megabit SPI SRAM with Serial and Parallel Interfaces and Integrated Video Display Controller, which outputs a composite video signal.

Possible video resolutions, PAL and NTSC modes might be exclusive depending on the mouted crystal (4.433618MHz or 3.579545MHz):

The chip has a 3.3V interface, so a level shifter logic is required, which is done by a MC74LVX50 buffer, which is able to handle SPI Mbps speed better that a simple FET based level shifter. A 512Kbit EEPROM for bitmaps and character memory is added, but is probably too slow for effective operation. On a suggestion of [kbdhog] the next version will have a SPI flash chip for speed and memory size. Now I am dreaming of SPI DMA, which just gave me an idea of a small PLD and a parallel flash memory to implement that.

A video opamp is available for improved signal strength when a longer cable is used, but might be bridged for testing purpose.

The circuit on the bottom left of the schematic is used to fill the 10cm x 10cm PCB space and left to the reader to figure out its functionality. ;-) I will end up with ~780 copies of this circuit which will last a lifetime or they might show up on Tindie.

Rev2 of the board (with added SPI FLASH) is being designed, might be the final one if things go well. Writing SW is so hard in comparison.

  • 1 × VLSI VS23S010D-L 1 Mbit SPI/8-Bit Parallel Bus SRAM with Video Display Controller
  • 1 × TI OPA362 Video op-amp
  • 1 × NCP1117-3.3 Linear voltage regulator 3.3V out
  • 1 × 24C512 I2C EEPROM 512Kbit
  • 1 × 74LVX50 Hex driver non-inverting 5V tolerant inputs

View all 10 components

  • VLSI tech support rocks x2

    MagicWolfi08/11/2017 at 02:15 0 comments

    The folks at VLSI tech support are great. [Panu] and [Kalle] are a big help with HW and SW. They even sent a full Arduino sketch to configure the VS23S010. It does configure the chip corretlyf̶o̶r̶ M̶C̶G̶A̶ 3̶2̶0̶x̶2̶0̶0̶ w̶h̶i̶c̶h̶ u̶n̶f̶o̶r̶t̶u̶n̶a̶t̶e̶l̶y̶ m̶y̶ T̶V̶ s̶e̶t̶ d̶o̶e̶s̶ n̶o̶t̶ f̶u̶l̶l̶y̶ ̶u̶n̶d̶e̶r̶s̶t̶a̶n̶d̶.̶ B̶u̶t̶ i̶t̶ i̶s̶ c̶l̶e̶a̶r̶l̶y̶ v̶i̶s̶i̶b̶l̶e̶ t̶h̶a̶t̶ t̶h̶e̶ v̶i̶d̶e̶o̶ o̶u̶t̶p̶u̶t̶ w̶o̶r̶k̶s̶.̶ N̶o̶w̶ ̶i̶t̶ i̶s̶ j̶u̶s̶t̶ a̶ m̶a̶t̶t̶e̶r̶ o̶f̶ t̶h̶e̶ r̶i̶g̶h̶t̶ c̶o̶n̶f̶i̶g̶u̶r̶a̶t̶i̶o̶n̶ o̶r̶ t̶h̶e̶ r̶i̶g̶h̶t̶ v̶i̶d̶e̶o̶ ̶m̶o̶n̶i̶t̶o̶r̶.

    With the help of VLSI tech support I had my facepalm moment for the week. Just from this picture they could tell me, that I had the crystal for PAL video mounted and not for NTSC (displeasure for some many different standards for everything). Fixing that and getting the video out termination right got me this result. YAY. Now it's only 1s and 0s and a lot of typing to program a graphics engine.

  • 1st response

    MagicWolfi07/26/2017 at 00:43 0 comments

    After some typing, compiling and syntax error fixing, this was the 1st response of the video chip on the shield:

    Initially I was scratching my head about what was going on, because page 24 of the datasheet says, the default value for the ID register is ABh, but page 49 tells the correct value of 2Bh and everything is hunky-dory.

    Now comes the easy part of figuring out how to configure the video display controller. The first image will be amazing as my only device with video input is a 40" TV.

  • 2 Prototypes

    MagicWolfi07/23/2017 at 02:18 0 comments

    2 boards are populated with all components (except the Arduino headers on one of them). One is build up with PAL crystal, the other with a NTSC version. Also only the PAL version has the additional video driver installed, it is just bridged on the other board. Initial test showed the 3.3V power rail OK and no smoke got released.

    Things to note:

    • The KiCAD Arduino shield footprint has connector through holes that are very small for regular pin headers. I almost got a press-fit connection. The extra long female headers have thinner pins and are OK.
    • All other footprints that I grabbed from the KiCAD libraries turned out to be correct (maybe I was just lucky ;)
    • Testpoints are very helpful.
    • I like silkscreen that is large enough to read without microscope.

    Now the programming begins, SPI communication first and then configuration of the video output. Then the fun starts with image display functions and porting Doom. 

  • PCBs are in

    MagicWolfi05/28/2017 at 01:50 0 comments

    Finally the bare PCBs arrived from DirtyPCBs today. This time it took the full 8 weeks, which is OK. That is what they say with the slow shipping order. The quality is very good as usual. They even managed to put a solder dam between the pads of the 0.5mm QFP footprint. This will make hand soldering super simple. And they do panels if you put multiple designs on the board by yourself. They do nice thin slots and next time I will try mousebites for even easier separation. Now I am off to the soldering iron.

    The little board is an in-line current source (* 78), which will be documented in its own project.

  • Todo list

    MagicWolfi05/07/2017 at 16:51 0 comments

    As the project page does not have a Todo list feature, I will try to "re-use" a project log for this. Starting now and editing later:

    - Add 3D models for missing components in KiCAD design (RCA conn, SOT23-6 opamp,HC49 crystal)

    Rev 02:

    - DONE Add SPI flash (2Mbit, SO-8, 25x20 type)

    - DISMISSED Add some LEDs (power rails, monitor detect, SPI activity)

    - A̶d̶d̶ ̶b̶u̶t̶t̶o̶n̶ ̶o̶r̶ ̶j̶u̶m̶p̶e̶r̶ ̶t̶o̶ ̶e̶n̶a̶b̶l̶e̶ ̶t̶e̶s̶t̶ ̶m̶o̶d̶e̶  testpin is for factory test only :(  

    - DONE Add pull-up resistors on signals nWP_5V, nHOLD_5V

    - DONE Disconnect signal Testmode(_5V), it is for factory testing only

    - DONE Add in-line resistors on signals nWP_5V, nHOLD_5V on the 'left side' of the pull-up/downs.

    - DONE Use 22R - TVS - 22R instead of 75R output impedance matching resistor. TVS type: CG0603MLA-5.5ME

    - DONE with  74LVC4245A Replace 74LVX50 with TXS0102 /  TXB0106 / 74LVC4245A / SN74LVC1T45 for availability.

    -  Add monitor detect line.

  • Virtual debuging

    MagicWolfi04/17/2017 at 02:12 0 comments

    If you look at things long enough, mistakes get noticed. I just updated the schematic with a 512Mbit EEPROM (not a bug) and replaced the 74LVC07 driver with a 74LVX50. The LVC07 would have the 5V tolerant inputs for the signal from Arduino to the video chip which I was looking for, but is an open-drain driver which does not really help with SPI signals. So I replaced it with the 74LVX50 which has the same package and pinout. Easy fix when the parts are not ordered yet.

View all 6 project logs

Enjoy this project?



Starhawk wrote 08/09/2017 at 21:40 point

That extra board looks a lot, from the schematic, like a simple constant current setup for driving LEDs...

  Are you sure? yes | no

MagicWolfi wrote 08/09/2017 at 23:57 point

Bingo! It is almost constant current, as it slightly increases with higher voltage. The nice part is, that is only has 2 connections so it can be easily wired inline into any  LED on wires, that do not need variable brightness control.

  Are you sure? yes | no

Starhawk wrote 08/10/2017 at 00:01 point

Haha, I thought that might be it. It's not an uncommon design. I saw it on Google over a year ago...

By the way, I absolutely love the idea of this Shield (the video part, not the LED driver) and that you're actually making them...

  Are you sure? yes | no

kbdhog wrote 04/11/2017 at 14:03 point

If I may offer a little idea: Since you already have SPI driving this board, perhaps add a nice sized SPI-flash chip (2mbits?). This can be used to store character fonts, icons, even entire bit-maps. Thereby removing that storage burden from the Arduino's memory space. The SPI-flash would be loaded once (via RS232 serial commands?) and then maybe you can have a write-protect jumper as well... making the contents somewhat "permanent".

  Are you sure? yes | no

MagicWolfi wrote 04/12/2017 at 21:17 point

Thanks, kdbhog. The I2C EEPROM on the board was planned to be for this purpose, I just used a small 24c 64 as placeholder, the biggest I can use is a 512Kbit. You are absolutely right, an SPI flash chip would give much larger storage and higher performance. I will add this for the next rev. Boards should arrive in 2-6 weeks, stay tuned, there will be updates. Cheers

  Are you sure? yes | no

kbdhog wrote 04/11/2017 at 02:38 point

Very often, 640x480, or NTSC/PAL, are *just enough*. Especially for diagnostic screen output, or simple control systems. I like it! I look forward to seeing this work.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates