What is VGATonic?
What is VGATonic... and What Problem Are You Trying to Solve?
VGATonic is addressed to single board computers and microcontrollers which would like to add - or add an additional - display. It isn't only limited to those applications though - with appropriate output, VGATonic can be added easily to your homebuilt computer and microcontroller projects - and even your desktop or laptop! It is meant to be a platform for others to easily add graphical output at a cheap cost, in a small area, and with a tiny power consumption. We also hope to appeal to the nostalgia of 8 bit color graphics!
VGATonic includes basic and easy to use hardware acceleration, allowing you to decide the quality of your graphics output - it can deliver accelerated graphics at 640x480, 320x240, 160x120, and 80x60 resolution and at 256, 16, 4 or 2 (black and white) colors. VGATonic also has an optional firmware which provides 848x480 or 424x240 VESA compatible output (for 16:9 monitors).
It has a framebuffer driver mode over SPI and/or Asynchronous TTL Serial, and also has a VT52 compatible terminal emulator mode for Asynchronous Serial - so you can get started with graphics ouput in minutes with many applications!
Best of all, it is completely open source (a rarity for graphics cards!) and targets very modestly priced components. My Linux drivers are all GPL licensed, while my microcontroller and Python code is all MIT licensed, along with all of my hardware. The repository has many examples to see just how to get the most out of VGATonic, so even your slower parts can get from zero to VGA output in hours instead of weeks.
How Does VGATonic Work?
VGATonic supports user input from either Asynchronous Serial (at 3.3v) or SPI (at 5/3.3/2.5v). Internally, it has four main components -
- A microcontroller which allows administrator functions and hosts a terminal emulator and a framebuffer mode. The microcontroller is also the master of the clock.
- A CPLD which hosts a SPI driver and the Display Controller
- A 4 MBit Static RAM for the display framebuffer
- A programmable clock for user logic and the pixel clock
Here's how they all fit together:
What Were Your Goals for the Project?
2015 Hackaday Prize Goals (Finished!)
- Default: 640x480 VGA (4:3) Link to Post!
- Alternate Firmware: 848x480 VESA Compatible (16:9) Link to Post!
- Supported Accelerated Lower Resolution: 424x240
- Alternate Firmware: 320x240 NTSC (4:3) Link to Post!
- Default: 8 Bit Per Pixel (256) Color Depth Link to Post!
- Supported Accelerated Lower Color Depths: 4bpp, 2bpp, 1bpp
- Hardware Acceleration: Write position movement to divide screen. Link to Post!
- Serial Support: Asynchronous Serial (UART/TTL Serial/TTL RS-232) Framebuffer. Link to Post!
- Rev B: 115200, 57600, 38400, 9600, 2400, 300 baud
- Rev A: 38400, 9600 baud
- Terminal Emulator: VT52 Compatible Codes Implemented. Link to Post!
- 40x15 Text, 256 Color foreground and background
Current Drivers - (GitHub)
- Raspberry Pi 2 Model B
- Odroid C1
- BeagleBone Black
- Intel Edison
- Arduino Uno
- Intel Galileo in Arduino Target Mode
- Serial Framebuffer
- Python; tested on SBCs above plus a Macbook
What Are The Licenses for the Project?
- All hardware - the PCBs and Kicad collateral.
- CPLD Firmware
- Microcontroller Firmware
- Arduino Framebuffer Driver
- UART Examples
- GPL version 2: (Kernel code and SPIDEV)
- All of the Linux Framebuffer Code
- The Linux User Space Driver code
- Third Party Licenses:
You Have Two Hardware Revisions - Which Should I Build?
Unless you want to experiment with NTSC, PAL, or SECAM... build Revision B. It is smaller so your PCB will be less expensive to fabricate, and it uses an external microcontroller crystal to support more serial speeds (including the key 115200 baud.).As of this post, Revision B can be built for about $23.50 including PCB fabrication - plus shipping.