Go Down

Topic: Multi-mode video display and keyboard interface (Read 2713 times) previous topic - next topic


New thread to replace http://forum.arduino.cc/index.php?topic=178808.0 because the title of the original thread is no longer applicable :)

I can announce that the multi-mode text/graphics display controller is now online.

(Web hosting is intermittent - everything IS online - if you can't connect, please try later)

VERY fast display updates and scrolling. Very much faster than options where text is drawn on to a graphic display. Will do timings soon.

This has been a major re-write since the last version, but still works using the same VERY INEXPENSIVE hardware - ATmega328 (Arduino UNO) processor and one other IC (74HCT166). Can be interfaced from any of the Arduino boards or any other circuit that either supports I2C or has 6 spare I/O pins.

40 Character normal text
80 Character normal text
40 Character bold text
80 Character bold text
40 Character normal double-height text
80 Character normal double-height text
40 Character bold double-height text
80 Character bold double-height text

160x100 bitmap graphics with set/reset pixel support functions

Text is the full IBM PC character set (ASCII and symbols,lines etc)

80x25 text is displayed at a resolution of 640x200

Being a "true" mixed text/graphics display, text rendering is at the proper resolution and is very quick.

The display consists of 25 lines, each line can have it's own text font setting or can be set for graphics - done automatically.
Only one font type per line, due to limited RAM.

Here is an example screenshot running on a widescreen PAL TV screen (AV input)...

Easy to interface using 8 bit, 4 bit or two-wire (I2C) connections.

All details are on my web page.

Also on the page remains the serial-->display and PC keyboard-->serial interface so that it can be run straight from a serial port.





As mentioned, I was going to produce performance numbers to back up my "very fast" claim.

Here they are...

2 wire performance is for 400KHz clock unless stated. This can be improved significantly by increasing the 2 wire clock speed.
PAL performance is higher than NTSC because a larger proportion of the time is free for PAL than NTSC, due to screen refresh rates.
Each graphics pixel set/reset requires 3 bytes to be sent, which is why 8 bit transfer noticeably faster than 2 wire.

Test conditions:
Host controller: ATmega88 running at 16MHz (identical performance to Arduino Uno or Nano etc.)
2 wire interface: Standard 400KHz clock speed unless specified.
Timing: Externally electronically timed using a Black*Star Apollo 100 Universal counter-timer.

The host test software was all written in C, so no assembly optimisations and was not written particularly efficiently, so performance could be higher.

All source on my page.





I've updated the Arduino Library to use of all the fantastic new functionality Grant has added. I've extended the set and clear bit graphics functions with draw and clear line, box and circle functions, and as a demo have produced a mock up of a game of Missile Command:

There are also commands to change font:

I am running all this from a shield:

Full details of the library are on my blog: http://blog.tynemouthsoftware.co.uk/2013/09/arduino-tv-out-terminal-library.html




Server issues...

There are problems with the server that holds my primary web pages.

Temporarily, I have also put the same pages on the following domain...



Please use the original URLs (searle.hostei.com) where possible, but use the ones above if the primary URLs are temporarily down.





Ups, sorry didn't see the last post on the other thread. So here is what I've posted there:
Hi, i know this is a very old thread but I'll give it a try.
I'm trying to make work this video adapter with a pro mini with a 328p on it. The main issue is that I don't have access to eBay, or any other online shop, because I live in Cuba (US Embargo, you know).
I'd like to use a pro mini by burning the CLKOUT fuse to ON, and using some other pin for VSync output. I will not use the 8 bit interface, nor the I2C. There are some available pins left. I was taking a look on the 328 data sheet and it looks that you have selected PB0 as VSync because there is an interrupt vector that points to it. My assembler skills are 0.000001%, I can't figure out how to use for VSync, let's say PB5.
I was guessing another workaround, burning CLK fuse so the slave Arduino receives CLK from the master one, in the master CLKOUT:ON. That would give me a TTL CLK for the shift register too.
Please help.

Go Up