HobbyTronics Serial-VGA for Arduino & Raspberry Pi
Displays, in all their various forms, are, without a doubt, the most popular hobby hardware hacking component. From LED matrixes to character LCDs and graphic LCDs, there’s something out there for every project, whether your goal is something that looks good, or is functional. Displays cost pins, though, and a vast majority of LCDs suitable for use with an Arduino are also somewhat on the small side.
Enter HobbyTronics’ Serial-VGA Monitor Driver Board. As the name suggests, it takes a serial input (one pin!) and outputs a VGA signal. Getting VGA-out from one pin sounds too good to be true, and it is. The Serial-VGA adaptor board is somewhat limited in its capabilities, and is another example of the throw-a-hoofing-great-big-processor-at-a-problem approach to Arduino expansion. But this isn’t a bad thing, and limitations aside the Serial-VGA adaptor will allow for far, far more readable characters than your average character, or 128×64 graphics LCD. In fact, if you use it with no virtual windows you can get 5,000 characters out at its 800×600 resolution.
Character LCDs are the closest comparison to the Serial-VGA adaptor. It’s more or less restricted to displaying only ASCII characters, but you’re not prevented from trying to draw ASCII graphics if you want to create a rogue-like game. Those 5,000 characters are far more than you’ll get on a character LCD, but many character LCDs will allow you to design custom characters for rudimentary graphics or icons, the Serial-VGA will not.
The one, major and obvious limitation of the Serial-VGA adaptor is that it requires a VGA-capable monitor. If you’ve already got one handy and are planning a desktop project, then you’re all set. But for in-the-field use you’re going to have to pick up a portable VGA monitor. You may already have such a thing, but if not then you can find them at the aptly-named Lilliput. The Lilliput 859GL-80NP/C, for example, is a great fit, with a VGA connection and an 800×600 resolution to match the Serial-VGA adaptor’s output. There are, however, cheaper alternatives if you shop around.
Serial-VGA has its benefits, too. For multiple Arduino projects, the Serial-VGA board can become an expansion to your VGA cable rather than the individual project. You need to only connect one wire to the project itself, but will probably want to set it up in such a way that you can easily connect power, ground, reset and serial TX->RX to each project. There’s nothing stopping you setting up a 5v voltage regulator and reset-button combo to use with the Serial-VGA. If your projects are set up to simply constantly output text on their TX pin at a pre-defined baud rate then you can connect your already powered adaptor to your Arduino with one wire. All this can be set up on a breadboard in a pinch, and for fairly little extra expense.
Now, down to the “gnitty-gritty” and technical stuff. The Serial-VGA has a basic protocol which runs, of course, over serial. It’s set sat 9600 baud by default, but you can send a command to raise this rate. Due to the way it works, and the fact that the Propellor chip that powers Serial-VGA needs a moment to “think” about some commands, however, you will have to implement a small delay between drawing operations, which makes it somewhat less practical for game graphics, or anything with a very fast refresh rate.
Whilst the protocol is simple and easy to get to grips with, I’ve thrown together a quick-n-dirty Arduino library for it anyway. It supports both hardware and software serial, and should get you started. You can find it here: https://github.com/Gadgetoid/Arduino-SerialVGA. Admittedly, however, it needs a little improvement!
Once you have set up the Serial-VGA you can create multiple windows (up to 9) and easily move your cursor between windows and within windows to draw whatever output you may desire.
The multiple window setup becomes useful when you’re handling input and want a realtime view of what you’re typing. Serial-VGA uses only the Transmit pin on your host device, so With the serial RX/Receive pin free you can support keyboard input whilst displaying the output to a little window on the bottom of the VGA screen. This is shown in HobbyTronic’s own demo sketch.
Now, I mentioned before that the Serial-VGA uses a processor of its own to handle VGA rendering. It sports a Propellor P8X32A-Q44, which has 8 discrete cores “known as Cogs in Propellor terminology”. Each Cog has a little dedicated RAM, and can more or less handle a task on its lonesome. Serial-VGA currently uses only 4 out of the 8 Cogs available on its Propellor chip, leaving plenty of headroom for future improvements ( you can flash updated firmware to the Serial-VGA via serial ) such as very basic graphics and possibly the ability to draw various graphs for a better view of the data your project might have gathered.
At the moment Serial-VGA is an elegant solution for visualising data from your microprocessor or other serial-enabled project. Whilst it’s off to a fairly basic start, the processing headroom left on the Propellor means that some interesting features could be in the pipeline. I’m eager to see basic graph drawing functions in particular, and these would require basic drawing functions which could also be useful elsewhere. The ability to define and position basic sprites would also be nice, but it really depends on how much memory the Propellor has left to play with.
Ultimately Serial-VGA is aimed at a slightly more professional market, and it excels at getting text from your microcontroller onto a screen, and lots of it.
The Serial-VGA Monitor Driver Board is available from HobbyTronics.co.uk for £24.