close-circle
Close
0%
0%

Open Source Graphics Card

Advanced graphics for anything from homebrew computers to weather reporting boxes and everything that can communicate over 3.3-5v UART.

Similar projects worth following
I have had this graphics card I made and was using for another project. The other project was being documented, but I realized that this card deserved documentation and a project of its own. It uses a Parallax Propeller to output VGA and NTSC video. It can be interfaced with 115200 baud UART. Now with a datasheet!

The NGT20 was originally designed to be a terminal for my custom computers. It executes this task amazingly well. With the default color configuration there are 3 foreground colors: white, red, and green. Red is great for STDERR or other error output. White for normal text, and green for anything you want to stand out. It automatically scrolls the screen when the cursor needs space to go down, making programming even easier.

How did you come to make this project???

Well I love to build computers. So I tried to make a single board computer with a parallax propeller.... and it never worked. The pcb was kinda scrapped and the project abandoned. Later, again working on an FPGA computer, I didn't want to make the FPGA do graphics, so I thought "Hey, why not use that old, scrapped and otherwise useless board to generate graphics?" Now, the remains of an old single board computer became my first version of this project! I never knew I could love a design so much, and I made another graphics card. A cleaner version. Now I am making them using boards from OSH Park! All thanks to a scrapped single board computer.

Where is the project now?

Pretty much got everything working. Will still improve it more sometime, so its still an ongoing project.

Quick specs:

  • Supports 3.3v and 5v UART
  • supports NTSC and VGA video output
  • Support for sprite rendering
  • RAM on card can be modified for quick, repeated draws of complex objects
  • Can be an arduino shield
To come once updated:
  • Higher Resolution (Maybe 640x480 VGA?)
  • More colors
  • Faster serial interface
  • Any suggestions?

My latest version is the NGT20, an advanced and refined product with all the latest bells and whistles.

Now available on Tindie here!

Documentation/Resources

It's best to see the Documentation Portal instead.

Arduino Library:

GitHub

Firmware Source Code:

GitHub

Datasheets:

NGT20 Datasheet

NGT15 Datasheet (WIP) (Outdated design! Why is this here?)

Please help me improve my datasheets! I would greatly appreciate feedback on these documents.

kicad_pcb - 147.70 kB - 04/24/2017 at 05:39

download-circle
Download

sch - 23.16 kB - 04/24/2017 at 05:39

blank
See BOM
download-circle
Download

NGT15-20_test.ino

A cool test program for an NGT15 or NGT20. Not compatible with GFXCard.spin firmware ;(

ino - 4.24 kB - 04/01/2017 at 03:12

download-circle
Download

  • 1 × Parallax Propeller GPU
  • 1 × 5Mhz crystal
  • 1 × 24LC256 Memory ICs / EEPROMs
  • 1 × 1.1k resistor
  • 1 × 560 Ohm resistor

View all 9 components

  • The NGT30 - What will it be?

    Dylan Brophy4 days ago 0 comments

    I would like to make an NGT30.  A few features I plan to add are follows:

    • Faster serial interface
    • Mostly SMD components
    • on-board arduino reset button for mega and similar boards
    • More commands
    • A way to add mods to firmware/GPU if I use an FPGA

    I may even remove the Parallax Propeller and replace it with an FPGA.  FPGA, not CPLD, because I would do some really killer stuff with it that may require an FPGA.

    I would like to make it backwards-compatible with my NGT20, so the serial interface must consider this.  I am mostly thinking about SPI, maybe I2C.  I would probably have some command to enable the new serial interface.  I would probably forget backwards compatibility if I used an FPGA however.  That would solve every problem :P

    I want to use SMD so that the board size is smaller, the BOM is less, and the parts cost less for the same quality.   This way the overall production price is reduced.

    I want to add the arduino reset button simply because it is really hard to reset my arduino mega with so many shields.

    Finally, I would like any suggestions.  If you're considering getting some kind of video shield or nice display output (or already have one), what would make things better?

  • Parallel Interface - with an upgrade

    Dylan Brophy07/04/2017 at 14:47 0 comments

    The propeller is a great chip, it is simple once you get used to it and works very well for simple applications, but its video output could be better:

    • Only 4 colors per area (exactly like NES graphics), only 6 bit color selections
    • VGA resolution capped at NTSC resolution because of memory limitations
    • Hard to get parallel interface

    The solution? An FPGA.

    This isn't the first time I have tried to make graphics devices using FPGAs and a parallel interface. Earlier on my #Z80 overpowered compute (possibly before I discovered HaD) I was trying to make... well a Z80 computer, but I overlooked some things and learned some hard lessons. So I had to literally start over. Well anyways I made a semi-nice graphics card designed to interface with the Z80 that also has a VGA connector and 8-bit DAC. It features a Mercury Board that stacks into a makeshift DIP64 socket.

    Here is this old board:

    I will improve it next time, promise!

    And some weird test program I was trying to write for it I found:

    Here is the bit configuration of the DAC:

    0 red 0

    1 red 1

    2 grn 0

    3 grn 1

    4 blu 0

    5 blu 1

    6 brightness 0

    7 brightness 1

    This will be a better design than before.

  • Parallel interface

    Dylan Brophy06/28/2017 at 03:23 0 comments

    Right now, the Open Source Graphics Card project supports only uart-capable devices. What about easy parallel interface for processors? Wouldn't it be nice to connect it to a Z80, 6502, or 8080? I think that will happen. The only thing I need is a circuit. Here is my current idea:

    My idea for a name is 'NGP10', as it is the first version and the middle P for parallel.

    I still am yet to get ESP support on my NGT20 design. I have an FTDI cable on the way for my ESP, don't worry. Keep you posted!

  • Yippie! Intel Curie (Semi) compatibility

    Dylan Brophy06/23/2017 at 04:47 0 comments

    Using a kinda lame hack I got it working. At first I used a hardware serial and put wires from pin 0 to pin 9 and pin 1 to pin 6. This unfortunately wastes 2 pins, but works as a shield. Next I tried using 4 wires to connect to the pins on the side, which also works and doesn't waste a pin, but then its not an arduino shield. Here is a pic of the first option:

    Sorry for bad pic - my phone has a terrible camera. Well I basically used some macros in the library to allow only AVRs and the Arduino DUE to use pins 6 and 9 for a softwareserial, and the others use Serial1. If they don't have Serial1... Well that's what I will have to figure out also.

    This probably works great for ESPs, but I can't test it on them! My ESP can't be programmed without a special FTDI cable that I don't have! Great win though, very encouraging. Oh yea, here is the first set of beefy macros I ever made, the ones for the NMT_GFX arduino library:

  • "Is it IoT Compatible?" - Someone

    Dylan Brophy06/22/2017 at 05:05 0 comments

    Well.... I never thought about that! It should be, after all it is 3.3v compatible, and what IoT MCU hasn't a UART? Of course the NGT20 is compatible! But what about the library? That's... Different. The Library for the NGT20 was built for and tested on AVR, however many IoT platforms use non-AVR MCUs, like the ESP8266 and Intel Curie. It is crucial for the library to have compatibility with these other MCUs so that nobody runs into trouble if they buy an NGT20 and realize there are software problems. I actually finally sold an NGT20 today (Yipee!), actually the only 2 I had in stock, and so now that I am selling them it is ever more important. This possible compatibility issue was brought to my attention when I was asked about NGT20/ESP compatibility.

    I put in an order from @SparkFun Electronics that arrived today including an ESP8266 and Arduino 101, which is Intel Curie based. I will be developing my library with my new test hardware (I never used an ESP or Intel Curie before!). I know that those ESPs are a learning curve, and can be SUPER difficult to use.

    So far I cannot program my ESP Thing because I got one that needs an EXTERNAL FTDI Serial bridge (Dang it!), and my first test on my Intel Curie is unsuccessful. Will keep things posted.

  • Non-AVR library compatibility?

    Dylan Brophy06/18/2017 at 20:34 0 comments

    The NGT20 works for almost any device if you have the right software. The library, however, was not originally designed to work on non-AVR MCUs. This is one thing in the design process back in spring I never thought about because I don't use the Arduino IDE for anything else. Well, recently I was asked a question regarding the library's support of ESPs. I don't actually own an ESP, so I borrowed one from my friend. The ESP itself has so many problems and keeps rebooting, I can't even test my library! I thought I might as well get my own ESP, but what about other MCUs that are programmed from the Arduino IDE, but aren't AVRs? To begin testing that I ordered two dev boards from @SparkFun Electronics, their ESP8266 Thing and an Arduino 101. Since I really need the library compatible sooner rather than later I got 2 day shipping, so I should hopefully have an updated library by the end of the week.

  • Integration into my computer building obsession

    Dylan Brophy04/09/2017 at 05:44 1 comment

    If you've read my profile much you will see that I really, really like to make computers. For no apparent reason. I have done (or at least attempted) in many ways, like building a z80 computer, or trying to make CPUs out of CMOS ICs, or using an arduino yun + a screen + a keyboard. Well, a wile back I made this really cool system with an arduino. It even did some multitasking. Two things really sucked about it: its display output and the user input. For user input it had 2 buttons and a potentiometer. It used a 2x16 character LCD screen. It was really cool, but I found the code recently and decided "Why not add a keyboard and an NGT20?" I needed some videos showing my NGT20 anyways, so I have been porting most of it to the new design. I added a GUI and a nicer shell program. No file system yet, but the beginnings of the OS and all the programs are emerging. Here is the video.

    This is how far I've gotten. I want to make a Terraria like game on the arduino using my NGT20. It probably wouldn't be as complex as Terarria itself, but similar idea. So cool because I always want to play Terraria but I never want to actually pay for the game.

  • Arduino library fixes, finished datasheet, and TINDIE!

    Dylan Brophy04/05/2017 at 00:30 0 comments

    I've been wanting to post this project on Tindie for a while so I've been working hard on the documentation and Arduino library. Now that that stuff's done, I can focus on selling. I'm working on the description and more pictures and such. So yea, tomorrow you'll be able to order one for yourself! Im really excited because I always want to grow my money, I want to be an entrepreneur, and I never want to spend anything on a project. Maybe this will be the avanue to extra cash for everything I love to make. Anyways, I'll be posting a link to my Tindie store soon. In the meantime, I have these much better photos that are fit for an online store:

    Hope this works!

  • VGA and NyanCat

    Dylan Brophy04/02/2017 at 21:15 0 comments

    Finally messed around with VGA output. Had some color issues at first but I find that I like the VGA color code system better. Although it's only 6-bit color, it is easy to make a color because the bits all align in a way that makes sense. blue is lower 2 bits, then 2 bits for green, then 2 for red. Easy.

    Got an OK picture of the new NGT20 board. Too bad, my phone camera isn't great.

    Its stacked on an arduino.

    I worked on displaying NyanCat on the monitor. Added a keyboard to the arduino and now he moves! Came out good:

    The NyanCat is a sprite uploaded to the shield from the arduino, then easily displayed many times very quickly.

    Also, I got an arduino library underway. I plan on making it so the library can generate a sprite on demand, while the arduino is running. Would make coding SO much easier. The NyanCat in a c hex array is not nice for a programmer.

    Will add the arduino library's GitHub to the project.

  • Final OSH Board, NGT20, and sprites working well

    Dylan Brophy04/01/2017 at 03:11 0 comments

    I got the final 3 boards from OSH Park today and assembled my latest version. It now properly supports VGA, although I haven't messed with this yet. I moved the uart pins to arduino pins 6 and 9, as RX and TX respectively. I found that, strangely, the arduino Leonardo does NOT like software serial for my shield! It does however work great on my arduino uno. I have no doubt that it would work great on almost any other arduino board, and that the Leonardo issue can be solved.

    I improved on my arduino test sketch, so now my arduino draws some cool trees and rainbow lines. It's pretty cool! will put up my arduino sketch soon.

View all 11 project logs

Enjoy this project?

Share

Discussions

Mark Sherman wrote 03/27/2017 at 21:16 point

I would like to see this with a SPI bus. A lowly Arduino can output SPI with a few Mhz SCLK, beats out 115kbps pretty well.

  Are you sure? yes | no

Dylan Brophy wrote 03/28/2017 at 01:27 point

I would love to add a faster serial interface. the only issue is the boards I have only 2 connections between the arduino and propeller. If you have any other fast serial protocol ideas i would love to hear, and I myself will think and look into this. Thankyou :D

P.S. - creating a project to solve this. bidirectional pins is out of the question for my OSH park boards ;( but im sure I can still make a custom high speed serial protocol. #2-pin SuperSerial

  Are you sure? yes | no

Steven Gann wrote 10/19/2016 at 22:56 point

Lovely. I can't wait to mess around with it this weekend.

  Are you sure? yes | no

Dylan Brophy wrote 10/28/2016 at 00:11 point

How'd it go?

  Are you sure? yes | no

Steven Gann wrote 10/03/2016 at 11:52 point

I've been working on a homebrew CPU and am looking for a graphics adapter. The last Parallax product I used was the Basic Stamp II, back when the BoE used RS-232, so I don't know a lot about Propeller. I do happen to have a Propeller Demo F board in my collection, but never used it.

Definitely excited for more information on this.

  Are you sure? yes | no

Dylan Brophy wrote 10/05/2016 at 02:06 point

Il make a schematic of the board I made and upload it.  If your making your own cpu, are you using an FPGA or discreet logic, or something else?  If your cpu is 5v or needs UART support you may need a few chips, but with a Demo Board you will have a great graphics adapter. I would recommend it.

  Are you sure? yes | no

Steven Gann wrote 10/05/2016 at 19:22 point

Right now, all I have is an emulator (https://github.com/stevengann/sg16). I picked up a Max II CPLD to learn VHDL, because I've been wanting to get involved with FPGAs anyway.

A schematic would be helpful, thank you. It seems the Prop is popular as a video adapter.

  Are you sure? yes | no

Dylan Brophy wrote 10/18/2016 at 13:21 point

Ok I have made a schemtic and it is in the source code.  If you open the GFXcard.spin in the Propeller Tool, you will see the code and the documentation.

  Are you sure? yes | no

Dylan Brophy wrote 03/26/2017 at 16:24 point

Hey, haven't heard from you in a while. How has it come?

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates