Generating Video

There have been a lot of Arduino video generation projects covered by the Make blog recently, I did my own a couple of weeks ago:

Arduino Video - NTSC from binarymillenium and Vimeo.

Since then I've experimented with upping the resolution by a lot, though memory becomes an issue quickly. Ideally I could have a whole set of different visuals to generate with an arduino and few knobs and buttons to control them with for a cheap VJ device.

Color is out of the question with an Arduino without hardware components to generate much higher frequencies than can be made in software with the standard 20MHz clock.

So next I'm thinking of trying color video generation with an FPGA. B&W generation on an FPGA seems trivial compared to doing it in software, and many grades of gray could be generated with PWM rather than having to add more resistors and use more digital outputs.

But can a 3.58MHz color signal be put on top of that successfully?

I have a Digilent Spartan 3 dev-kit that's a few years old, it has a 50 MHz oscillator. I could generate 50/14 = 3.571 Mhz clock from that, each period would be 14 cycles long. So that means only 13 different phase shifts from that would be possible, and I'm not sure if a full 360 of phase shifts is allowed- it might only be 1/2 or 1/4 of that. And then there's the problem of PWMing those to produce different amplitudes- for one half period there are 7 cycles. A normal one would have PWM like 1010101, then a 1100110 (or maybe 1100011), and then 1101101 or 1110111 or something else but it's not clear any filtering I would do or the tv input does would actually create a readable 3.571 MHz signal out of that. It's worth a shot anyhow.

There are a few color video FPGA projects out there, one on opencores, I'll look into those if my efforts aren't that successful.

Once I can generate a test pattern, I'll want to synthesize a cpu and program it with a game or VJ stuff to generate interesting moving visuals. I don't think I can make a microblaze with the free Xilinx Webpack tools, but maybe something like OpenFire or PicoBlaze?

No comments: