Better Cheap Video

This device uses a PIC16F1825 for improved performance. Many of its internal features make it a dandy device for this application.

1) An SPI port for shifting out video data.

2) A hardware UART for receiving text data.

3) 1 K of continuous memory for mapping video.

4) Advanced 16 bit FSR registers with auto-increment features.

This unit produces 12 lines of 30 characters. Unlike the previous 'Dirt Cheap Video', it can receive continuous 9600 baud data without any glitching of the video output.

Inputs are provided for both TTL and RS-232 level signals at 9600 baud, 8 data bits, 1 stop bit, no parity. Any part of the screen can be written to directly and line wraps work predictably for the entire 12 lines.


To access the device, send the '@' symbol followed by 2 characters. The first character specifies the Row (A-L), and the second character specifies the column (A-Z,[,\,],^. After that characters are placed on the screen in sequence with wrap around on all lines. Note: no carriage returns (CR) or linefeeds (LF) are processed. To get to the next line, you need to send another address sequence (@XY) as described above.

The Circuit

The PIC runs internally at 32 Mhz using an 8 Mhz xtal. Input goes to the hardware UART at RC5 either directly of via an RS-232 inverter circuit (Q1). Video output comes from the SPI port on SDO/RC2 with RC1 directly generating vertical and horizontal sync. Q2 forms a driver for the standard 75 ohm load of video monitors. A power supply of 8 to 14 volts is sufficient to run the unit.

Because of some design limitations, all of the character data must reside in a single page of program memory (256 bytes). This is only enough room for 36 characters (at 7 bytes per character). However, by 'folding' much of the data, several extra characters can be created. The full ASCII set is not supported and many characters will display a blanks.

Although the Source file is provided, trying to modify it without totally screwing up the video signal is quite difficult. The code has been written to generate the video signal in real time, with the time part down to one instruction cycle (one eight millionth of a second). Getting the text data into the device while generating a video signal is like trying to eat a bowl of spaghetti with chopsticks while juggling several bananas!

So you will probably just want to use the object code (hex file) as is. Here also are the Layout and Parts Placement files.